From 0a487409dc90a5373ed3779098f9ec5c17e4f628 Mon Sep 17 00:00:00 2001 From: shy Date: Sun, 3 Mar 2024 17:17:36 +0800 Subject: [PATCH] add some --- const.js | 5 +++++ frame.js | 7 ++++--- index.css | 9 +++++---- lib/misc.js | 1 + panel/footer.js | 5 ++++- panel/header.js | 9 +++++++-- plugin/local/code/inner.css | 2 +- plugin/local/code/inner.js | 21 ++++++++++----------- plugin/local/code/vimer.css | 1 + plugin/local/code/vimer.js | 4 +--- plugin/local/wiki/feel.js | 2 ++ plugin/state.js | 7 ++++--- plugin/table.js | 1 + 13 files changed, 46 insertions(+), 28 deletions(-) diff --git a/const.js b/const.js index 34987dcd..f6b3d6b6 100644 --- a/const.js +++ b/const.js @@ -144,6 +144,7 @@ var aaa = { USERNICK: "usernick", USERNAME: "username", PASSWORD: "password", USERROLE: "userrole", USERZONE: "userzone", VOID: "void", TECH: "tech", ROOT: "root", + PUBLIC: "public", PRIVATE: "private", } var lex = { SPLIT: "split", PARSE: "parse", @@ -220,6 +221,7 @@ var cli = { QRCODE: "qrcode", COLOR: "color", BLACK: "black", WHITE: "white", BLUE: "blue", RED: "red", GRAY: "gray", CYAN: "cyan", GREEN: "green", PURPLE: "purple", YELLOW: "yellow", MAGENTA: "magenta", SILVER: "silver", ALICEBLUE: "aliceblue", TRANSPARENT: "transparent", LINUX: "linux", DARWIN: "darwin", WINDOWS: "windows", + SH: "sh", } var log = { INFO: "info", WARN: "warn", ERROR: "error", DEBUG: "debug", TRACE: "trace", @@ -253,6 +255,8 @@ var chat = { SHARE: "share", RIVER: "river", STORM: "storm", FIELD: "field", TOOL: "tool", STATE: "state", MENUS: "menus", SSO: "sso", LOCATION: "location", IFRAME: "iframe", DESKTOP: "desktop", OUTPUT: "output", SIMPLE: "simple", FLOAT: "float", FULL: "full", CMD: "cmd", + MESSAGE: "message", + MATRIX: "matrix", HEADER: "Header", ACTION: "Action", FOOTER: "Footer", libs: ["base.js", "core.js", "date.js", "misc.js", "page.js", "user.js"].map(function(p) { return "/lib/"+p }), @@ -328,6 +332,7 @@ var html = {value: { CARD_BUTTON: 5, CARD_WIDTH: 320, CARD_HEIGHT: 160, PLUG_WIDTH: 800, PLUG_HEIGHT: 480, STORY_HEIGHT: 480, FLOAT_HEIGHT: 480, FLOAT_WIDTH: 1200, DESKTOP_WIDTH: 1200, DESKTOP_HEIGHT: 684, + ORDER_SHOW_LIMIT: 30, ORDER_SHOW_DELAY: 150, }, FIELDSET: "fieldset", LEGEND: "legend", OPTION: "option", ACTION: "action", OUTPUT: "output", STATUS: "status", OPTION_ARGS: "select.args,input.args,textarea.args", INPUT_ARGS: "input.args,textarea.args", INPUT_BUTTON: "input[type=button]", INPUT_FILE: "input[type=file]", diff --git a/frame.js b/frame.js index f4cf7716..515b5b62 100644 --- a/frame.js +++ b/frame.js @@ -263,7 +263,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { full: !can.isCmdMode() && "切换全屏", open: !can.isCmdMode() && "打开链接", // qrcode: !can.isCmdMode() && "生成链接", - chat: can.user.isTechOrRoot(can) && "发送聊天", + chat: can.user.isTechOrRoot(can) && can.ConfIndex() != chat.MESSAGE && "发送聊天", // chat: can.misc.Search(can, ice.MSG_DEBUG) == ice.TRUE && "发送聊天", help: can.page.ClassList.has(can, can._fields||can._target, html.PLUGIN) && can.Conf("_help") && can.Conf("_help") != "" && "查看文档", // vimer: can.page.ClassList.has(can, can._fields||can._target, html.PLUGIN) && can.Conf("_fileline") && can.misc.Search(can, ice.MSG_DEBUG) == ice.TRUE && "查看源码", @@ -1032,11 +1032,12 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { } } }, - orderShow: function(can, target, key, limit, delay) { if (can.user.isMobile) { return } target = target||can._output, limit = limit||30, delay = delay||50 + orderShow: function(can, target, key, limit, delay) { if (can.user.isMobile) { return } target = target||can._output var list = can.page.SelectChild(can, target, key||html.DIV_ITEM, function(target) { can.page.style(can, target, html.VISIBILITY, html.HIDDEN); return target }) + limit = limit||html.ORDER_SHOW_LIMIT, delay = delay||html.ORDER_SHOW_DELAY can.core.Next(list, function(target, next, index) { if (index < limit) { - can.page.style(can, target, html.VISIBILITY, ""), can.onmotion.delay(can, next, list.length > 3? delay: 0) + can.page.style(can, target, html.VISIBILITY, ""), can.onmotion.delay(can, next, list.length > 3? delay/(index||1): 0) } else { can.core.List(list, function(target) { can.page.style(can, target, html.VISIBILITY, "") }) } diff --git a/index.css b/index.css index 73cbc748..7c873ec5 100644 --- a/index.css +++ b/index.css @@ -54,15 +54,16 @@ body { --header-height:48px; --footer-height:var(--action-height); --action-height:32px; --status-height:var(--action-height); --river-width:var(--project-width); --project-width:230px; --input-width:140px; --button-width:60px; --form-width:320px; --url-input-width:320px; --textarea-height:96px; - --qrcode-width:360px; --qrcode-height:364px; - --iframe-height:420px; + --qrcode-width:360px; --qrcode-height:364px; + --iframe-height:420px; --card-height:160px; --card-width:320px; --story-height:480px; - --float-height:var(--story-height); --float-width:1200px; + --float-height:var(--story-height); --float-width:1200px; --plug-height:var(--story-height); --plug-width:var(--float-width); --desktop-height:684px; --desktop-width:var(--float-width); --desktop-icon-size:80px; --action-button:10; --table-button:5; --card-button:5; - --river-margin:80px; --action-margin:200px; + --order-show-limit:30; --order-show-delay:150; + --river-margin:80px; --action-margin:200px; --body-font-family:sans-serif; --legend-font-family:var(--body-font-family); --status-font-family:var(--body-font-family); diff --git a/lib/misc.js b/lib/misc.js index 043985d3..9f40ebb7 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -222,6 +222,7 @@ Volcanos("misc", { return args }, SplitPath: function(can, path) { + if (path.indexOf("http") == 0) { return [path] } if (path.indexOf("/require/") == 0) { return [path] } if (path.indexOf("/plugin/") == 0) { return ["usr/volcanos/", path.split("?")[0]] } var ls = path.split(nfs.PS); if (ls.length == 1) { return [nfs.PWD, ls[0]] } diff --git a/panel/footer.js b/panel/footer.js index cc35bcc4..7e8a1fab 100644 --- a/panel/footer.js +++ b/panel/footer.js @@ -21,7 +21,10 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can._wss = can.onda // can.onexport._float(can, "cli", list[0], list.slice(1), function(sub) { can.getActionSize(function(left) { can.page.style(can, sub._target, html.LEFT, left+html.PLUGIN_MARGIN, html.RIGHT, "") }) }) can.onexport._float(can, "cli", {index: "can.console", display: "/plugin/local/code/xterm.js"}, list, function(sub) { can.getActionSize(function(left) { can.page.style(can, sub._target, html.LEFT, left+html.PLUGIN_MARGIN, html.RIGHT, "") }) }) } - }}, "", target, [chat.TITLE]) }, + }}, "", target, [chat.TITLE]) + can.onappend.input(can, {type: html.BUTTON, name: code.XTERM, onclick: function(event) { can.onappend._float(can, code.XTERM, cli.SH) }}, "", can._output) + can.onappend.input(can, {type: html.BUTTON, name: chat.MESSAGE, onclick: function(event) { can.onappend._float(can, chat.MESSAGE) }}, "", can._output) + }, _storm: function(can, msg, target) { can.ui.storm = can.page.Append(can, can._output, [html.MENU])._target }, _state: function(can, msg, target) { can.user.isMobile || can.core.List(can.base.Obj(can.Conf(chat.STATE)||msg.Option(chat.STATE), can.onexport.list).reverse(), function(item) { can.page.Append(can, target, [{view: [[html.ITEM, chat.STATE]], list: [ diff --git a/panel/header.js b/panel/header.js index 0afcc7aa..80a82472 100644 --- a/panel/header.js +++ b/panel/header.js @@ -139,6 +139,11 @@ Volcanos(chat.ONACTION, {_init: function(can) {}, setnick: function(event, can) { can.user.input(event, can, [{name: aaa.USERNICK, value: can.Conf(aaa.USERNICK)}], function(list) { can.runAction(event, aaa.USERNICK, [list[0]], function(msg) { can.page.Select(can, can._output, can.core.Keys(html.DIV, aaa.USERNICK), function(item) { can.page.Modify(can, item, can.Conf(aaa.USERNICK, list[0])) }), can.user.toastSuccess(can) }) }) }, + setavatar: function(event, can) { can.user.input(event, can, [{name: aaa.AVATAR, value: can.Conf(aaa.AVATAR), action: mdb.ICONS}], function(list) { can.runAction(event, aaa.AVATAR, [list[0]], function(msg) { + can.page.Select(can, can._output, can.core.Keys(html.DIV, aaa.AVATAR)+" "+html.IMG, function(item) { item.src = can.misc.Resource(can, list[0]) }), can.user.toastSuccess(can) + }) }) }, + setbackground: function(event, can) { can.user.input(event, can, [{name: aaa.BACKGROUND, value: can.Conf(aaa.BACKGROUND), action: mdb.ICONS}], function(list) { can.runAction(event, aaa.BACKGROUND, [list[0]], function(msg) { + }) }) }, clear: function(event, can) { can.onimport.background(event, can, "") }, logout: function(event, can) { can.user.logout(can) }, share: function(event, can, args) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(args||[])) }, @@ -149,12 +154,12 @@ Volcanos(chat.ONACTION, {_init: function(can) {}, cli.QRCODE, "shareuser", [chat.THEME], [aaa.LANGUAGE], // [nfs.SAVE, aaa.EMAIL, web.TOIMAGE, code.WEBPACK], - [aaa.USER, "setnick", web.CLEAR, aaa.LOGOUT], + [aaa.USER, "setnick", "setavatar", "setbackground", web.CLEAR, aaa.LOGOUT], ], _trans: kit.Dict("shareuser", "共享用户", cli.QRCODE, "生成链接", chat.THEME, "界面主题", aaa.LANGUAGE, "语言地区", nfs.SAVE, "保存网页", aaa.EMAIL, "发送邮件", web.TOIMAGE, "生成图片", code.WEBPACK, "打包页面", - aaa.USER, "用户信息", "setnick", "设置昵称", aaa.PASSWORD, "修改密码", web.CLEAR, "清除背景", aaa.LOGOUT, "退出登录", + aaa.USER, "用户信息", "setnick", "设置昵称", "setavatar", "设置头像", "setbackground", "设置背景", aaa.PASSWORD, "修改密码", web.CLEAR, "清除背景", aaa.LOGOUT, "退出登录", "change language to zh-cn", "切换语言为中文", "change language to en-us", "切换语言为英文", diff --git a/plugin/local/code/inner.css b/plugin/local/code/inner.css index c9f46e79..4296352d 100644 --- a/plugin/local/code/inner.css +++ b/plugin/local/code/inner.css @@ -56,7 +56,7 @@ fieldset.inner>div.output>div.layout>div.path>a { padding:var(--input-padding) v fieldset.inner>div.output>div.layout>div.path>a:hover { background-color:var(--hover-bg-color); } fieldset.inner>div.output>div.layout>div.path>span { padding:var(--input-padding); } fieldset.inner>div.output>div.layout>div.path>span:hover { background-color:var(--hover-bg-color); } -fieldset.inner>div.output>div.layout>div.path span.func { padding:var(--input-padding); flex-grow:1; text-align:center; } +fieldset.inner>div.output>div.layout>div.path span.func { padding:var(--input-padding); } fieldset.inner>div.output>div.layout>div.path span.mode { padding:var(--input-padding); } body.width2 fieldset.inner>div.output>div.layout>div.path span.mode { display:none; } /* body.width2 fieldset.inner>div.output>div.layout>div.path span.mode { display:none; } */ diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 9136c15f..0c7ab9ea 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -72,8 +72,9 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { var paths = can.core.Sp __tabPath: function(can, cache) { var target = can.ui.path; can.onappend.style(can, html.FLEX, can.ui.path) can.onimport._tabPath(can, nfs.PS, nfs.PATH, can.base.Path(can.Option(nfs.PATH), can.Option(nfs.FILE)), function(p) { var ls = can.onexport.split(can, p); can.onimport.tabview(can, ls[0], ls[1]) - }, target), can.onimport._tabFunc(can, target, cache), can.onimport._tabMode(can) - can.page.Append(can, target, [{view: [["item", "space"], html.SPAN]}]) + }, target), can.page.Append(can, target, [{view: [["item", "space"], html.SPAN]}]) + can.onimport._tabFunc(can, target, cache), can.page.Append(can, target, [{view: [["item", "space"], html.SPAN]}]) + can.onimport._tabMode(can), can.page.Append(can, target, [{view: [["item", "space"], html.SPAN], style: {"flex-grow": "4"}}]) can.onimport._tabIcon(can) target.ondblclick = function(event) { if (event.target != target) { return } var show = can.onmotion.toggle(can, can.ui.tabs); can.onmotion.toggle(can, can.ui.project, show), can.onimport.layout(can) @@ -82,13 +83,12 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { var paths = can.core.Sp }, _tabPath: function(can, ps, key, value, cb, target) { var args = value.split(mdb.FS); can.onmotion.clear(can, can.ui.path) can.core.List(can.core.Split(args[0], ps), function(value, index, list) { - can.page.Append(can, target, [{text: [value+(indexdiv.output>div.layout>div.layout>div.layout div.content { border-left:var(--box-border); border-top:var(--box-border); } fieldset.vimer>div.output>div.layout>div.layout input.current { background-color:transparent; color:transparent; padding-left:var(--input-padding); height:var(--code-line-height); position:absolute; } +fieldset.vimer>div.output.plugin>div.layout>div.layout input.current { display:none; } fieldset.vimer>div.output>div.layout>div.layout div.content div.complete { background-color:unset; padding-top:0; display:none; position:absolute; height:1px; overflow:visible; } fieldset.vimer>div.output>div.layout>div.layout div.content div.complete div.prefix { color:transparent; white-space:pre; float:left; } fieldset.vimer>div.output>div.layout>div.layout div.content div.complete table.content thead { display:none; } diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 0091bab3..b1219db9 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -61,9 +61,7 @@ Volcanos(chat.ONFIGURE, { }) Volcanos(chat.ONACTION, {list: [ "创建", "编译", "源码", "文档", - "聊天", - "矩阵", - "审批", + "计划", "聊天", "矩阵", "后台", "桌面", "官网"], _trans: {show: "预览", exec: "展示"}, _run: function(event, can, button, args, cb) { can.runAction(event, button, args, cb||function(msg) { if (msg.IsErr()) { return can.user.toastFailure(can, msg.Result()) } diff --git a/plugin/local/wiki/feel.js b/plugin/local/wiki/feel.js index 488b4669..53a593d1 100644 --- a/plugin/local/wiki/feel.js +++ b/plugin/local/wiki/feel.js @@ -38,6 +38,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { can.ui = can.onappend.l _target = target, can.onmotion.delay(can, function() { can.onaction.full({}, can) }) } }), _target && _target.click() + can.onmotion.orderShow(can, can.ui.project) }, _file: function(can, path) { var p = location.href.indexOf(ice.HTTP) == 0? "": "http://localhost:9020" return path.indexOf(ice.HTTP) == 0? path: p+can.base.Path(web.SHARE_LOCAL, can.db.dir_root||"", path) @@ -49,6 +50,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { can.ui = can.onappend.l page: function(can, list, begin, limit) { can.onmotion.clear(can, can.ui.display) begin = parseInt(begin||can.db.begin), limit = parseInt(limit||can.Action(mdb.LIMIT)) for (var i = begin; i < begin+limit; i++) { list && list[i] && can.onimport.file(can, list[i].path, list[i], i) } + can.onmotion.orderShow(can, can.ui.display, "*") can.onappend._toggle(can, can.ui.display, function(event) { can.onaction.prev(event, can) }, function(event) { can.onaction.next(event, can) }) can.Status({begin: begin, limit: limit, total: list.length}) }, diff --git a/plugin/state.js b/plugin/state.js index b540fbb3..f06864c0 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -163,10 +163,11 @@ Volcanos(chat.ONACTION, {list: ["刷新数据", "打开空间": function(event, can) { can.user.open(can.misc.MergePodCmd(can, {pod: can.ConfSpace()||can.misc.Search(can, ice.POD)})) }, "打开链接": function(event, can) { can.user.open(can.onexport.link(can)) }, "发送聊天": function(event, can) { - can.user.input(event, can, [{name: "message", display: "/require/usr/icebergs/core/chat/message.js", run: function(event, cmds, cb) { - can._root.Header.run(can.request(event, {pod: can.ConfSpace()}), [ctx.ACTION, "message"].concat(cmds), function(msg) { cb(msg) }) + can.user.input(event, can, [{name: chat.MESSAGE, display: "/require/usr/icebergs/core/chat/message.js", run: function(event, cmds, cb) { + can._root.Header.run(can.request(event, {pod: can.ConfSpace()}), [ctx.ACTION, chat.MESSAGE].concat(cmds), function(msg) { cb(msg) }) }}], function(list) { - can._root.Header.run(can.request(event, {pod: can.ConfSpace()}), [ctx.ACTION, "message", list[0], mdb.TYPE, "plug", ctx.INDEX, can.ConfIndex(), ctx.ARGS, JSON.stringify(can.Option())]) + can._root.Header.run(can.request(event, {pod: can.ConfSpace()}), [ctx.ACTION, chat.MESSAGE, list[0], mdb.TYPE, "plug", ctx.INDEX, can.ConfIndex(), ctx.ARGS, JSON.stringify(can.Option())]) + can.onappend._float(can, chat.MESSAGE) }) }, "生成链接": function(event, can) { can.onmotion.share(event, can, [], [web.LINK, can.user.copy(event, can, can.onexport.link(can))]) }, diff --git a/plugin/table.js b/plugin/table.js index 1f98d96d..1cf12896 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -243,6 +243,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { title: [[value.usernick, value.username].join(lex.SP), [value.agent, value.system, value.ip].join(lex.SP)].join(lex.NL)} })) msg.Length() > 0 && can.page.Append(can, can.ui.online, [{text: msg.Length()+""}]) + can.onmotion.orderShow(can, can.ui.online, "*", 10, 300) }), can.onimport._online(can, 30000) }, delay) }, })