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

add language

This commit is contained in:
harveyshao 2021-09-28 10:15:53 +08:00
parent 10d9e7cf7f
commit d5fe74945c
13 changed files with 55 additions and 26 deletions

View File

@ -298,7 +298,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
},
field: function(can, type, item, target) { type = type || html.INPUT, item = item || {}
var name = (item.nick||item.name||"").split(" ")[0]
var title = item.help? name+"("+item.help.split(" ")[0]+")": name
var title = !item.help || can.user.language(can) == "en"? name: name+"("+item.help.split(" ")[0]+")"
return can.page.Append(can, target||can._output, [{view: [(type||"")+" "+(item.name||"")+" "+(item.pos||""), html.FIELDSET], list: [
name && {text: [title, html.LEGEND]},
can.user.mod.isCmd && type == "plugin" && {view: [html.LEGEND, html.DIV, title]},
@ -343,7 +343,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
return {type: html.OPTION, value: value, inner: value}
}), item.className || can.page.ClassList.add(can, item, "args")
break
case "button": item.value = item.value||item.name||"查看"; break
case "button": item.value = item.value||item.name||"list"; break
case "upfile": item.type = html.FILE; break
case "upload": item.type = html.FILE, input.name = "upload"; break
}
@ -475,7 +475,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
})
can.onappend._action(can, ["关闭", "刷新", {input: "text", placeholder: "filter", style: {position: ""}, _init: function(input) {
can.onappend._action(can, ["close", "refresh", {input: "text", placeholder: "filter", style: {position: ""}, _init: function(input) {
can.onengine.signal(can, "keymap.focus", can.request({}, {cb: function(event) {
if (event.target.tagName == "INPUT") { return }
if (event.key == "Escape") { ui.close(); return }
@ -495,8 +495,8 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
}
})
})
}}], ui.action, { "关闭": ui.close,
"刷新": function(event) { ui.close(), can.toast.click() },
}}], ui.action, { "close": ui.close,
"refresh": function(event) { ui.close(), can.toast.click() },
})
can.onappend.table(can, msg, function(value, key, index, line, list) {
return {text: [value, "td"], onclick: function(event) {
@ -543,6 +543,7 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, targe
},
topic: function(can, topic) { topic && (can._topic = topic)
can.user.topic(can, can._topic || can.user.Search(can, "topic") || ((can.user.Search(can, cli.POD)||can.base.isNight())? "black": "white"))
can.page.ClassList.add(can, document.body, can.user.language(can))
},
figure: function(event, can, target, right) { target = target||can._target; if (!event || !event.target) { return }
var left = event.clientX-event.offsetX, top = event.clientY-event.offsetY+event.target.offsetHeight; if (right) {

View File

@ -143,6 +143,7 @@ Volcanos("base", {help: "数据类型",
},
Time: function(time, fmt) { var now = this.Date(time)
var list = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"]
var list = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
fmt = fmt || "%y-%m-%d %H:%M:%S"
fmt = fmt.replace("%y", now.getFullYear())
fmt = fmt.replace("%m", this.Number(now.getMonth()+1, 2))

View File

@ -37,13 +37,21 @@ Volcanos("user", {help: "用户操作", agent: {
reload: function(force) { (force || confirm("重新加载页面?")) && location.reload() },
jumps: function(url) { location.href = url },
open: function(url) { window.open(url) },
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"]: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"]
return can.base.Time(time, (fmt||"%y-%m-%d %H:%M:%S").replace("%w", list[now.getDay()]))
},
title: function(text) { return text && (document.title = text), document.title },
topic: function(can, name) {
can.user.isMobile && (name += " mobile") && can.user.isLandscape && (name += " landscape")
can.page.Modify(can, document.body, {className: name})
},
language: function(can) {
return can.user.Search(can, "language")
},
trans: function(can, text) {
if (can.user.language(can) == "en") { return text }
if (typeof text == "object") {
return can.core.Item(text, function(k, v) { can.core.Value(can._trans, k, v) })
}
@ -53,6 +61,9 @@ Volcanos("user", {help: "用户操作", agent: {
"submit": "提交", "cancel": "取消",
"open": "打开", "close": "关闭",
"begin": "启动", "end": "结束",
"list": "查看", "back": "返回",
"run": "执行", "refresh": "刷新",
"share": "共享",
}[text] || text
},
toast: function(can, content, title, duration, progress) {

View File

@ -58,6 +58,10 @@ input[type=button] {
letter-spacing:4px;
padding-left:10px;
cursor:pointer;
font-family:monospace;
}
body.en input[type=button] {
letter-spacing:2px;
}
input[type=button]:hover {
background-color:gray; color:cyan;

View File

@ -2,7 +2,7 @@ Volcanos({name: "chat", iceberg: "/chat/", volcano: "/frame.js",
libs: ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], panels: [
{name: "Header", help: "标题栏", pos: "head", state: ["time", "username", "avatar"]},
{name: "Search", help: "搜索框", pos: "auto"},
{name: "River", help: "群聊组", pos: "left", action: ["创建", "刷新"]},
{name: "River", help: "群聊组", pos: "left", action: ["create", "refresh"]},
{name: "Action", help: "工作台", pos: "main"},
{name: "Footer", help: "状态条", pos: "foot", state: ["ncmd"]},
], main: {name: "Header"}, river: {

View File

@ -44,7 +44,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
_state: function(can, msg, target) { const STATE = "state"
can.core.List(can.base.Obj(can.Conf(STATE)||msg.Option(STATE), [kit.MDB_TIME, aaa.USERNAME]), function(item) {
if (item == aaa.AVATAR) {
can.page.Append(can, target, [{view: [STATE+" "+item], list: [{img: can.Conf(item)}], onmouseenter: function(event) {
can.page.Append(can, target, [{view: [STATE+" "+item], list: [{img: can.Conf(item)||" "}], onmouseenter: function(event) {
can.onaction.carte(event, can, [can.page.Format(html.IMG, can.Conf(item), 160)])
}}])
return
@ -119,7 +119,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
},
time: function(can, target) { can.onlayout.topic(can)
target.innerHTML = can.base.Time(null, "%w %H:%M:%S")
target.innerHTML = can.user.time(can, null, "%w %H:%M:%S")
},
menu: function(can, cmds, cb) {
return can.page.Append(can, can._output, [{type: cmds[0], list: can.core.List(cmds.slice(1), function(item) {
@ -158,6 +158,9 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta,
"river": "菜单",
"search": "搜索",
"create": "创建",
"share": "共享",
"help": "帮助",
"tutor": "入门简介",
"manual": "使用手册",
@ -235,7 +238,13 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta,
},
username: function(event, can) {
can.onaction.carte(event, can, ["shareuser", aaa.USERNICK, "clear", aaa.LOGOUT])
can.onaction.carte(event, can, ["shareuser", aaa.USERNICK, "clear", aaa.LOGOUT, "english", "chinese"])
},
english: function(event, can) {
can.user.Search(can, "language", "en")
},
chinese: function(event, can) {
can.user.Search(can, "language", "zh")
},
shareuser: function(event, can) {
can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE, kit.MDB_TYPE, aaa.LOGIN])
@ -252,7 +261,10 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta,
}, true)
})
},
clear: function(event, can, button) { can.onimport.background(event, can, "") },
clear: function(event, can, button) {
can.onimport.background(event, can, "")
can.onimport.avatar(event, can, "")
},
logout: function(event, can) { can.user.logout(can) },
River: function(can) { can.search({}, ["River.onmotion.toggle"]) },

View File

@ -54,12 +54,12 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, can, msg, panel, cmds, cb) {
var list = can.onengine._river||can.onengine.river
cmds.length == 0 && can.core.Item(list, function(key, value) {
msg.Push({hash: key, name: value.name}) // 群组列表
msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) // 群组列表
}); if (cmds.length != 1 && cmds[1] != chat.TOOL) { return false }
var river = list[cmds[0]]; if (!river) { return false }
can.core.Item(river.storm, function(key, value) {
msg.Push({hash: key, name: value.name}) // 应用列表
msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) // 应用列表
}), can.base.isFunc(cb) && cb(msg); return true
},
})
@ -135,8 +135,8 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg,
Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加应用", "添加设备", "重命名群组", "删除群组"],
sublist: ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"],
menus: [chat.RIVER,
["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备", "创建空间"],
["共享", "共享群组", "共享应用", "共享工具", "共享主机", "访问空间"],
["create", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备", "创建空间"],
["share", "共享群组", "共享应用", "共享工具", "共享主机", "访问空间"],
],
"创建群组": function(event, can) { can.onaction.create(event, can) },

View File

@ -9,14 +9,14 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta,
}
},
"执行": function(event, can) {
"run": function(event, can) {
var title = can.sup._name+" "+can.sup.Input([], true)
var toast = can.user.toast(can, "执行中...", title, -1)
can.run(event, [], function() { toast.close(), can.user.toast(can, "执行成功...", title) })
},
"刷新": function(event, can) { can.run(event) },
"查看": function(event, can) { can.run(event) },
"返回": function(event, can) { can.sup.onimport._back(can.sup) },
"refresh": function(event, can) { can.run(event) },
"list": function(event, can) { can.run(event) },
"back": function(event, can) { can.sup.onimport._back(can.sup) },
onchange: function(event, can) {
if (can.Conf("type") == "select") { can.run(event) }

View File

@ -38,7 +38,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb,
event.key == "Enter" && can.onaction.searchLine(event, can, ui.word.value)
}], value: "main", onfocus: function(event) { event.target.setSelectionRange(0, -1) }},
{button: ["搜索", function(event) { can.onaction.searchLine(event, can, ui.word.value) }]},
{button: ["返回", function(event) { can.onaction["返回"](event, can) }]},
{button: ["back", function(event) { can.onaction["back"](event, can) }]},
{button: ["关闭", function(event) { can.onaction["搜索"](event, can) }]},
]},
{view: "tags", style: {"max-height": 160}},
@ -170,7 +170,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
},
})
Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"],
"返回": function(event, can) {
"back": function(event, can) {
var last = can.history.pop(); last = can.history.pop()
last && can.onimport.tabview(can, last.path, last.file, last.line)
can.Status("跳转数", can.history.length)

View File

@ -43,7 +43,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
event.target.setSelectionRange(0, -1)
can.onkeymap._command(can)
}},
{button: ["执行", function(event) {
{button: ["run", function(event) {
can.onkeymap.command.Enter(event, can, can.ui.cmd.value)
}]},
{button: ["清空", function(event) {

View File

@ -134,7 +134,7 @@ Volcanos("onaction", {help: "控件交互", list: [],
location.href = "/"
},
"演示": function(event, can) { var list = [], current = []
"play": function(event, can) { var list = [], current = []
can.page.Select(can, can._output, ".story", function(item) {
switch (item.tagName) {
case "H1":

View File

@ -2,7 +2,7 @@ Volcanos({name: "demo", iceberg: "http://localhost:9020/chat/", volcano: "/frame
libs: ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], panels: [
{name: "Header", help: "标题栏", pos: "head", state: ["time", "username"]},
{name: "Search", help: "搜索框", pos: "auto"},
{name: "River", help: "群聊组", pos: "left", action: ["创建", "刷新"]},
{name: "River", help: "群聊组", pos: "left", action: ["create", "refresh"]},
{name: "Action", help: "工作台", pos: "main"},
{name: "Footer", help: "状态条", pos: "foot", state: ["ncmd"]},
], main: {name: "Header", list: ["/publish/order.js"]}, plugin: [

View File

@ -97,14 +97,14 @@ Page({
}
switch (input.name) {
case "返回": // 恢复命令
case "back": // 恢复命令
page.data.back[data.order].pop(); var line = page.data.back[data.order].pop()
kit.List(field.inputs, function(input, index) {
if (input._input != "button") { input.value = line&&line[index] || "" }
})
case "执行": // 执行命令
case "run": // 执行命令
case "刷新": // 执行命令
case "查看": page.run(event, data.order); break
case "list": page.run(event, data.order); break
default:
var cb = page.plugin[input.name]; can.base.isFunc(cb)? cb(event, page, data.order, input.name):
page.run(event, data.order, ["action", input.name].concat(kit.List(field.inputs, function(input) {