diff --git a/lib/misc.js b/lib/misc.js index 6d3c8e87..ff1f6e56 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -170,10 +170,7 @@ Volcanos("misc", { }, SearchHash: function(can) { var hash = location.hash if (arguments.length > 1) { - hash = can.core.List(arguments, function(item) { - return can.base.replaceAll(item, ":", "%3A") - return encodeURIComponent(item) - }).slice(1).join(nfs.DF) + hash = can.core.List(arguments, function(item) { return can.base.replaceAll(item, ":", "%3A") }).slice(1).join(nfs.DF) if (can.isCmdMode() || can._name == "Action") { location.hash = hash } } return can.core.List(can.core.Split(can.base.trimPrefix(location.hash, "#"), nfs.DF)||[], function(item) { return decodeURIComponent(item) }) diff --git a/lib/page.js b/lib/page.js index 1f63d208..ab0b0071 100644 --- a/lib/page.js +++ b/lib/page.js @@ -344,4 +344,10 @@ Volcanos("page", { cb && cb(themeMedia.matches? html.DARK: html.LIGHT) return themeMedia.matches? html.DARK: html.LIGHT }, + parseAction: function(can, value) { var action = [] + can.page.Select(can, can.page.Create(can, html.DIV, value.action), html.INPUT, function(target) { + action.push(target.name), target.name != target.value && can.user.trans(can, kit.Dict(target.name, target.value)) + }) + return action + }, }) diff --git a/panel/action.js b/panel/action.js index ca88d3e8..3bc3c37f 100644 --- a/panel/action.js +++ b/panel/action.js @@ -75,6 +75,7 @@ Volcanos(chat.ONACTION, {_init: function(can, target) { onresize: function(can) { can.onaction.layout(can), window.setsize && window.setsize(can.page.width(), can.page.height()) }, ontitle: function(can, msg) { can.onlayout._storage(can, "") }, + repos: function(can) { can.user.opens(can.user.info.repos) }, portal: function(can) { can.user.opens(can.misc.MergePodCmd(can, {cmd: web.WIKI_PORTAL})) }, desktop: function(can) { can.user.opens(can.misc.MergePodCmd(can, {cmd: web.CHAT_MACOS_DESKTOP})) }, layout: function(can, button, skip) { can.page.ClassList.del(can, can._target, can._layout||can.onlayout._storage(can)), can._header_tabs && can.onmotion.hidden(can, can._header_tabs) @@ -83,8 +84,8 @@ Volcanos(chat.ONACTION, {_init: function(can, target) { can.isCmdMode() || can.core.List(can._plugins, function(sub) { sub._delay_refresh = false, can.page.ClassList.set(can, sub._target, html.OUTPUT, [TABVIEW, HORIZON, VERTICAL].indexOf(button) > -1) }) var cb = can.onlayout[button]; can.base.isFunc(cb) && cb(can) || can.onlayout._plugin(can, button) }, - _menus: [[html.LAYOUT, ice.AUTO, TABS, TABVIEW, HORIZON, VERTICAL, GRID, FREE, FLOW, PAGE], "desktop", "portal"], - _trans: kit.Dict("portal", "官网", "desktop", "桌面", html.LAYOUT, "布局", ice.AUTO, "默认布局", TABS, "标签布局", TABVIEW, "标签分屏", HORIZON, "左右分屏", VERTICAL, "上下分屏", GRID, "网格布局", FREE, "自由布局", FLOW, "流动布局", PAGE, "网页布局"), + _menus: [[html.LAYOUT, ice.AUTO, TABS, TABVIEW, HORIZON, VERTICAL, GRID, FREE, FLOW, PAGE], "desktop", "portal", "repos"], + _trans: kit.Dict("repos", "资源", "portal", "官网", "desktop", "桌面", html.LAYOUT, "布局", ice.AUTO, "默认布局", TABS, "标签布局", TABVIEW, "标签分屏", HORIZON, "左右分屏", VERTICAL, "上下分屏", GRID, "网格布局", FREE, "自由布局", FLOW, "流动布局", PAGE, "网页布局"), }) Volcanos(chat.ONLAYOUT, { tabs: function(can) { can.getActionSize(function(height, width) { can.ConfHeight(height-can.Conf(html.MARGIN_Y)+html.ACTION_MARGIN), can.ConfWidth(width-can.Conf(html.MARGIN_X)) }) diff --git a/panel/header.js b/panel/header.js index eaf18be6..4f65cbaf 100644 --- a/panel/header.js +++ b/panel/header.js @@ -58,6 +58,7 @@ Volcanos(chat.ONACTION, {_init: function(can) { function show(msg) { var p = can.misc.Search(can, "redirect_uri") if (location.pathname == "/login" && p) { return location.replace(can.base.MergeURL(p, ice.MSG_SESSID, can.misc.CookieSessid(can))) } can.user.info.usernick = can.Conf(aaa.USERNICK), can.user.info.userrole = msg.Option(ice.MSG_USERROLE), can.user.info.avatar = msg.Option(aaa.AVATAR), can.user.info.background = msg.Option(aaa.BACKGROUND) + can.user.info.repos = msg.Option("spide.hub") msg.Option(nfs.SCRIPT) && can.require(can.base.Obj(msg.Option(nfs.SCRIPT)), function(can) { can.onaction.source(can, msg) }) lang(msg, function() { can.onmotion.clear(can), can.onimport._init(can, can.request(), can._output), can.onengine.signal(can, chat.ONLOGIN) }) } diff --git a/plugin/local/chat/iframe.js b/plugin/local/chat/iframe.js index dbfb762d..9f4fcc62 100644 --- a/plugin/local/chat/iframe.js +++ b/plugin/local/chat/iframe.js @@ -1,5 +1,4 @@ -Volcanos(chat.ONIMPORT, {_init: function(can, msg) { - can.current = msg.TableDetail() +Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.current = msg.TableDetail(), can.sup.onimport.size(can.sup, can.sup.ConfHeight(), can.sup.ConfWidth(), true) can.target = can.page.Appends(can, can._output, [{type: html.IFRAME, src: can.current.link, height: can.ConfHeight(), width: can.ConfWidth(), style: {border: 0}}])._target can.onimport.layout(can) }, diff --git a/plugin/local/team/plan.js b/plugin/local/team/plan.js index 536a3cd9..00103755 100644 --- a/plugin/local/team/plan.js +++ b/plugin/local/team/plan.js @@ -52,10 +52,8 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( can.page.style(can, sub._output, html.MAX_HEIGHT, ""), can.runAction(event, ice.RUN, [task[mdb.ZONE], task[mdb.ID]].concat(cmds), cb) } can._plugin_display = sub - sub.onexport.output = function() { can.onmotion.delay(can, function() { - sub.onimport.size(sub, can._display_heights[[task.zone, task.id].join(mdb.FS)] = can.base.Max(sub._target.offsetHeight, can.ConfHeight()/2), can.ConfWidth()-can.ui.project.offsetWidth) - can.onimport.layout(can) - }) }, sub.onaction.close = function() { can.onmotion.toggle(can, can.ui.display), can.onimport.layout(can) } + sub.onaction.close = function() { can.onmotion.toggle(can, can.ui.display), can.onimport.layout(can) } + sub.onexport.output = function() { can.onmotion.delay(can, function() { sub.onimport.display_size(can, sub), can.onimport.layout(can) }) } }, can.ui.display) }, day: function(can, msg) { var head = [team.HOUR, team.TASK] @@ -109,7 +107,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( layout: function(can) { can.ui.layout(can.ConfHeight(), can.ConfWidth()) can.user.isMobile && can.page.style(can, can.ui.content, html.HEIGHT, "") - var sub = can._plugin_display; sub && sub.onimport.size(sub, can.ConfHeight()/2, can.ConfWidth()-can.ui.project.offsetWidth, true) + var sub = can._plugin_display; sub && sub.onimport.display_size(can, sub) can.ui.toggle && can.ui.toggle.layout() return can.page.styleHeight(can, can._output, can.ConfHeight()), can.page.styleHeight(can, can.ui.project, can.ConfHeight()) diff --git a/plugin/state.js b/plugin/state.js index d74ffa01..1ab64b50 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -49,6 +49,11 @@ Volcanos(chat.ONIMPORT, { var sub = can.sub; if (!sub) { return auto } sub.Mode(mode), sub.ConfHeight(height), sub.ConfWidth(width) mode? sub.onlayout[mode](sub, height, width): sub.onlayout._init(sub, height, width); return auto }, + display_size: function(can, sub) { var border = 1 + can.page.style(can, sub._output, html.MAX_HEIGHT, "") + var _height = can.base.Max(sub._target.offsetHeight+border, can.ConfHeight()/2) + sub.onimport.size(sub, _height-border, can.ConfWidth()-(can.ui && can.ui.project? can.ui.project.offsetWidth: 0), true) + }, }) Volcanos(chat.ONACTION, {list: [ "刷新数据", "刷新界面", diff --git a/plugin/table.js b/plugin/table.js index 7ae70a6d..b5fc0072 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -3,6 +3,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( var cbs = can.onimport[can.Conf(ctx.STYLE)||msg.Option(ctx.STYLE)]; if (can.base.isFunc(cbs)) { can.onappend.style(can, can._args[ctx.STYLE], target), can.core.CallFunc(cbs, {can: can, msg: msg, target: target}) } else { + can.sup.onimport.size(can.sup, can.sup.ConfHeight(), can.sup.ConfWidth(), true) can.onappend.table(can, msg, null, target), can.onappend.board(can, msg, target), can.onmotion.story.auto(can, target) } }, @@ -11,10 +12,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( {view: html.ACTION, inner: value.action, onclick: function(event) { can.run(can.request(event, value), [ctx.ACTION, event.target.name]) }}, ]} })), can.onlayout.expand(can, can._output, 320) }, - _vimer_zone: function(can, msg, target) { msg.Table(function(value) { var action = [] - can.page.Select(can, can.page.Create(can, html.DIV, value.action), html.INPUT, function(target) { - action.push(target.name), target.name != target.value && can.user.trans(can, kit.Dict(target.name, target.value)) - }) + _vimer_zone: function(can, msg, target) { msg.Table(function(value) { var action = can.page.parseAction(can, value) can.onimport.item(can, {name: can.page.Color(value[can.Conf(mdb.FIELD)||mdb.VIEW]||value[mdb.NAME]||value[mdb.TEXT]||value[mdb.TYPE]), title: value[mdb.TEXT]}, function(event) { can.sup.onexport.record(can, value.name, mdb.NAME, value, event) }, function() { return shy(action, function(event, button, meta, carte) { can.misc.Event(event, can, function(msg) { carte.close()