diff --git a/base/web/dream.go b/base/web/dream.go index e907b899..42119a7c 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -230,7 +230,7 @@ const DREAM = "dream" func init() { Index.MergeCommands(ice.Commands{ DREAM: {Name: "dream refresh", Help: "梦想家", Icon: "Launchpad.png", Role: aaa.VOID, Meta: kit.Dict( - ice.CTX_TRANS, kit.Dict(html.INPUT, kit.Dict(WORKER, "空间", SERVER, "机器", ORIGIN, "主机")), + ice.CTX_TRANS, kit.Dict(html.INPUT, kit.Dict(WORKER, "空间", SERVER, "门户", ORIGIN, "主机")), ), Actions: ice.MergeActions(ice.Actions{ ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m = m.Spawn() @@ -487,6 +487,16 @@ func init() { } if !m.IsCliUA() && aaa.IsTechOrRoot(m) { _dream_list_more(m, simple) + } else { + msg := m.Spawn(kit.Dict(ice.MSG_USERROLE, aaa.TECH)) + m.Cmds(SPACE).Table(func(value ice.Maps) { + if value[mdb.TYPE] == SERVER { + if p := ProxyDomain(msg, value[mdb.NAME]); p != "" { + value[mdb.TEXT] = p + m.PushRecord(value, mdb.TIME, mdb.TYPE, mdb.NAME, mdb.ICONS, nfs.MODULE, nfs.VERSION, mdb.TEXT) + } + } + }) } if ice.Info.NodeType == WORKER || !aaa.IsTechOrRoot(m) || m.IsCliUA() { m.Action() @@ -503,7 +513,7 @@ func init() { } if !aaa.IsTechOrRoot(m) { m.Options(ice.MSG_TOOLKIT, "") - m.Option(ice.MSG_ONLINE, ice.FALSE) + m.Options(ice.MSG_ONLINE, ice.FALSE) } } else if arg[0] == ctx.ACTION { gdb.Event(m, DREAM_ACTION, arg) diff --git a/base/web/render.go b/base/web/render.go index e4c9a211..db3ea793 100644 --- a/base/web/render.go +++ b/base/web/render.go @@ -56,9 +56,12 @@ func Render(m *ice.Message, cmd string, args ...ice.Any) bool { case COOKIE: // value [name [path [expire]]] RenderCookie(m, arg[0], arg[1:]...) case STATUS, ice.RENDER_STATUS: // [code [text]] - // RenderStatus(m.W, kit.Int(kit.Select("200", arg, 0)), kit.Select(m.Result(), strings.Join(kit.Slice(arg, 1), " "))) - m.W.WriteHeader(kit.Int(kit.Select("200", arg, 0))) - renderMsg(m) + if m.IsCliUA() { + RenderStatus(m.W, kit.Int(kit.Select("200", arg, 0)), kit.Select(m.Result(), strings.Join(kit.Slice(arg, 1), " "))) + } else { + m.W.WriteHeader(kit.Int(kit.Select("200", arg, 0))) + renderMsg(m) + } case ice.RENDER_REDIRECT: // url [arg...] http.Redirect(m.W, m.R, m.MergeLink(arg[0], arg[1:]), http.StatusTemporaryRedirect) case ice.RENDER_DOWNLOAD: // file [type [name]] diff --git a/base/web/store.go b/base/web/store.go index a044249a..d601f1ec 100644 --- a/base/web/store.go +++ b/base/web/store.go @@ -53,8 +53,12 @@ func init() { return } if m.Display(""); len(arg) == 0 { + list := []string{} m.Cmd(SPIDE, arg, kit.Dict(ice.MSG_FIELDS, "time,icons,client.type,client.name,client.origin")).Table(func(value ice.Maps) { - kit.If(value[CLIENT_TYPE] == nfs.REPOS, func() { m.Push(mdb.NAME, value[CLIENT_NAME]).Push(mdb.ICONS, value[mdb.ICONS]) }) + kit.If(value[CLIENT_TYPE] == nfs.REPOS, func() { + list = append(list, value[CLIENT_NAME]) + m.Push(mdb.NAME, value[CLIENT_NAME]).Push(mdb.ICONS, value[mdb.ICONS]).Push(ORIGIN, value[CLIENT_ORIGIN]) + }) }) if ice.Info.NodeType == WORKER || !aaa.IsTechOrRoot(m) { m.Action() @@ -67,20 +71,24 @@ func init() { m.Cmdy(DREAM) return } + dream := C(DREAM) origin := SpideOrigin(m, arg[0]) - kit.If(kit.IsIn(arg[0], ice.OPS, ice.DEV), func() { - if kit.IsIn(kit.ParseURL(origin).Hostname(), m.Cmds(tcp.HOST).Appendv(aaa.IP)...) { - origin = m.Option(ice.MSG_USERHOST) - } else { - origin = tcp.PublishLocalhost(m, origin) - } - }) + kit.If(origin == "", func() { arg[0], origin, dream = ice.DEV, arg[0], arg[0]+dream }) + if kit.IsIn(kit.ParseURL(origin).Hostname(), append(m.Cmds(tcp.HOST).Appendv(aaa.IP), tcp.LOCALHOST)...) { + origin = m.Option(ice.MSG_USERHOST) + } else { + origin = tcp.PublishLocalhost(m, origin) + } list := m.Spawn(ice.Maps{ice.MSG_FIELDS: ""}).CmdMap(DREAM, mdb.NAME) - m.SetAppend().Spawn().SplitIndex(m.Cmdx(SPIDE, arg[0], C(DREAM), kit.Dict(mdb.ConfigSimple(m, CLIENT_TIMEOUT)))).Table(func(value ice.Maps) { - if value[mdb.TYPE] != WORKER { + stat := map[string]int{} + m.SetAppend().Spawn().SplitIndex(m.Cmdx(SPIDE, arg[0], dream, kit.Dict(mdb.ConfigSimple(m, CLIENT_TIMEOUT)))).Table(func(value ice.Maps) { + stat[value[mdb.TYPE]]++ + m.Push("", value, kit.Split("time,type,name,icons,repos,binary,module,version")) + if value[mdb.TYPE] == SERVER { + m.Push(mdb.TEXT, value[mdb.TEXT]).Push(ORIGIN, value[mdb.TEXT]) + m.PushButton() return } - m.Push("", value, kit.Split("time,name,icons,repos,binary,module,version")) m.Push(mdb.TEXT, value[nfs.REPOS]).Push(ORIGIN, origin) if _, ok := list[value[mdb.NAME]]; ok || arg[0] == ice.OPS { m.PushButton(PORTAL, DESKTOP, ADMIN, OPEN) @@ -90,7 +98,7 @@ func init() { m.PushButton(PORTAL, INSTALL) } }) - m.StatusTimeCount(ORIGIN, origin) + m.StatusTimeCount(ORIGIN, origin, stat) } }}, }) diff --git a/base/web/store.js b/base/web/store.js index 1830bb26..aaa3ab7d 100644 --- a/base/web/store.js +++ b/base/web/store.js @@ -2,13 +2,22 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { can.ui = can.onappend.layout(can), can.onimport.__project(can, msg) }, __project: function(can, msg) { var select, current = can.sup.db._zone||can.db.hash[0]||(can.user.info.nodetype == web.WORKER? ice.OPS: ice.DEV) msg.Table(function(value) { - var _target = can.onimport.item(can, value, function(event) { can.isCmdMode()? can.misc.SearchHash(can, value.name): can.sup.db._zone = value.name - if (can.onmotion.cache(can, function() { return value.name }, can.ui.content, can._status)) { return can.onimport.layout(can) } - can.run(can.request(event, {_toast: ice.PROCESS}), [value.name], function(msg) { - can.onimport.__content(can, msg), can.onappend._status(can, msg), can.onimport.layout(can) - }) + var _target = can.onimport.item(can, value, function(event) { + can.onimport.dream(event, can, value, _target) }, null, can.ui.project); select = (value.name == current? _target: select)||_target }), select && select.click(), can.onmotion.orderShow(can, can.ui.project) can.onappend.style(can, "output card", can.ui.content), can.onmotion.delay(can, function() { can.onimport.layout(can) }) - }, __content: function(can, msg) { can.onimport.card(can, msg) }, + }, __content: function(can, msg, dev, target) { var list = [] + can.onimport.card(can, msg, null, function(value) { if (value.type == web.SERVER) { list.push(value); return true } }) + can.onimport.itemlist(can, list, function(event, value) { can.onimport.dream(event, can, value, event.currentTarget) }, null, target) + }, + dream: function(event, can, value, target) { can.isCmdMode()? can.misc.SearchHash(can, value.name): can.sup.db._zone = value.name + can.page.Select(can, can.ui.project, html.DIV_ITEM, function(_target) { + can.page.ClassList.set(can, _target, html.SELECT, _target == target) + }) + if (can.onmotion.cache(can, function() { return value.name }, can.ui.content, can._status)) { return can.onimport.layout(can) } + can.run(can.request(event, {_toast: ice.PROCESS}), [value.origin], function(msg) { + can.onimport.__content(can, msg, value.name, target), can.onappend._status(can, msg), can.onimport.layout(can) + }) + }, }, [""]) diff --git a/core/chat/cmd.go b/core/chat/cmd.go index e4d2bef9..af4f9046 100644 --- a/core/chat/cmd.go +++ b/core/chat/cmd.go @@ -2,6 +2,7 @@ package chat import ( ice "shylinux.com/x/icebergs" + "shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/web" kit "shylinux.com/x/toolkits" ) @@ -16,7 +17,9 @@ func init() { web.RenderMain(m) default: if m.IsCliUA() { - m.Cmdy(arg, m.Optionv(ice.ARG)).RenderResult() + if aaa.Right(m, arg) { + m.Cmdy(arg, m.Optionv(ice.ARG)).RenderResult() + } } else { web.RenderCmd(m, cmd, kit.Slice(arg, 1)) }