mirror of
https://shylinux.com/x/icebergs
synced 2025-04-26 01:24:05 +08:00
opt portal
This commit is contained in:
parent
21fdda3335
commit
45493499e9
@ -158,6 +158,8 @@ const (
|
||||
PATHNAME = "pathname"
|
||||
FILENAME = "filename"
|
||||
|
||||
SRC_TEMPLATE = "src/template/"
|
||||
SRC_DOCUMENT = "src/document/"
|
||||
USR_LEARNING_PORTAL = "usr/learning/portal/"
|
||||
USR_ICONS_AVATAR = "usr/icons/avatar.jpg"
|
||||
USR_ICONS_CONTEXTS = "usr/icons/contexts.jpg"
|
||||
|
@ -66,6 +66,7 @@ fieldset.macos.desktop>div.output>fieldset.web.chat.macos.dock>div.output div.it
|
||||
fieldset.macos.desktop>div.output>div.desktop>div.item.disable { display:none; }
|
||||
fieldset.macos.menu>div.output>div.item { padding:0 var(--button-padding); height:var(--desktop-menu-height); float:right; }
|
||||
fieldset.macos.menu>div.output>div.item.avatar { padding:0; }
|
||||
fieldset.macos.menu>div.output>div.item.avatar { margin-right:10px; }
|
||||
fieldset.macos.menu>div.output>div.item.avatar>img { padding:0; height:var(--desktop-menu-height); }
|
||||
fieldset.macos.menu>div.output>div.menu { padding:0 var(--button-padding); float:left; }
|
||||
fieldset.macos.menu>div.output>div.tabs { font-style:italic; padding:0 var(--button-padding); float:left; }
|
||||
|
@ -3,13 +3,15 @@ fieldset.web.wiki.portal {
|
||||
--code-font-size:14px; --code-line-height:20px;
|
||||
}
|
||||
fieldset.web.wiki.portal.home { --portal-max-width:1500px; }
|
||||
fieldset.web.wiki.portal>div.header { display:none; }
|
||||
fieldset.web.wiki.portal>div.output { padding:0; }
|
||||
fieldset.web.wiki.portal>div.output>div.header { background-color:rgb(22 31 49); height:var(--portal-header-height); --hover-bg-color:var(--plugin-bg-color); }
|
||||
fieldset.web.wiki.portal>div.output>div.header div.list { display:flex; }
|
||||
fieldset.web.wiki.portal>div.output>div.header div.story[data-name=navmenu] { --hover-fg-color:white; }
|
||||
fieldset.web.wiki.portal>div.output>div.header div.story[data-name=navmenu] { display:flex; justify-content:center; }
|
||||
fieldset.web.wiki.portal>div.output>div.header div.story[data-name=navmenu] div.item { text-align:center; padding:var(--legend-padding); height:var(--portal-header-height); }
|
||||
fieldset.web.wiki.portal>div.output>div.header div.story[data-name=navmenu] div.item { display:flex; align-items:center; }
|
||||
fieldset.web.wiki.portal>div.output>div.header div.story[data-name=navmenu] div.item:first-child { line-height:calc(var(--portal-header-height) - 2 * var(--legend-padding)); }
|
||||
body.mobile fieldset.web.wiki.portal.cmd>div.output>div.header div.story[data-name=navmenu] div.item { line-height:calc(var(--portal-header-height) - 2 * var(--legend-padding)); }
|
||||
fieldset.web.wiki.portal>div.output>div.header div.story[data-name=navmenu] div.item:first-child { line-height:calc(var(--portal-header-height) - 2 * var(--legend-padding)); font-size:24px; }
|
||||
fieldset.web.wiki.portal>div.output>div.header div.story[data-name=navmenu] div.item.select { background-color:var(--output-bg-color); }
|
||||
fieldset.web.wiki.portal>div.output>div.header div.story[data-name=navmenu] div.item:hover { background-color:var(--output-bg-color); }
|
||||
fieldset.web.wiki.portal>div.output>div.header div.story[data-name=navmenu] div.item.space { padding:0px; margin:0 var(--portal-main-padding); }
|
||||
@ -26,34 +28,31 @@ fieldset.web.wiki.portal>div.output>div.layout>div.main div.story.column { displ
|
||||
fieldset.web.wiki.portal>div.output>div.layout>div.main div.story.column fieldset.inner>div.output>div.layout>div.layout div.content div.tips { top:10px; right:10px; }
|
||||
fieldset.web.wiki.portal>div.output>div.layout>div.main div.story.column h1 { font-size:48px; }
|
||||
fieldset.web.wiki.portal>div.output>div.layout>div.main div.story.column h2 { margin:0; }
|
||||
body.mobile fieldset.web.wiki.portal>div.output>div.layout>div.main fieldset { width:fit-content; }
|
||||
body.mobile fieldset.web.wiki.portal>div.output>div.layout>div.main fieldset>div.action { display:none; }
|
||||
fieldset.web.wiki.portal>div.output>div.layout>div.main div.story.column b { font-size:22px; }
|
||||
fieldset.web.wiki.portal>div.output>div.layout>div.main div.story.column input[type=button] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
|
||||
fieldset.web.wiki.portal>div.output>div.layout>div.main fieldset.inner.output div.content {
|
||||
background-color:var(--code-bg-color); color:var(--code-fg-color); padding:var(--input-padding) 0;
|
||||
--code-comment:silver; --code-keyword:orange;
|
||||
--code-function:cyan; --code-constant:silver; --code-string:silver;
|
||||
--code-object:silver; --code-datatype:silver; --code-package:silver;
|
||||
}
|
||||
fieldset.web.wiki.portal>div.output>div.layout>div.main div.story[data-type=spark][data-name=shell] {
|
||||
background-color:var(--code-bg-color); color:var(--code-fg-color); padding:var(--button-padding) var(--input-padding); margin:var(--plugin-margin) 0; box-shadow:var(--box-shadow);
|
||||
}
|
||||
fieldset.web.wiki.portal>div.output>div.layout>div.main table.content div.story[data-type=spark][data-name=shell] {
|
||||
margin-top:unset;
|
||||
}
|
||||
body.cmd.web.wiki.portal { background-color:rgb(22 31 49); }
|
||||
fieldset.web.wiki.portal>div.output>div.layout>div.main table.content div.story[data-type=spark][data-name=shell] { margin-top:unset; }
|
||||
fieldset.web.wiki.portal.home>div.output>div.layout>div.main p { white-space:pre-wrap; text-align:center; }
|
||||
|
||||
body.dark fieldset.web.wiki.portal>div.output>div.layout { background-color:var(--plugin-bg-color); --code-bg-color:var(--output-bg-color); }
|
||||
body.dark fieldset.web.wiki.portal>div.output>div.header div.story[data-name=navmenu] div.item:hover { background-color:var(--plugin-bg-color); }
|
||||
body.dark fieldset.web.wiki.portal>div.output>div.header div.story[data-name=navmenu] div.item.select { background-color:var(--plugin-bg-color); }
|
||||
body.white fieldset.web.wiki.portal>div.output>div.header { color:silver; }
|
||||
body.light fieldset.web.wiki.portal>div.output>div.header { color:white; }
|
||||
body.light fieldset.web.wiki.portal>div.output>div.header div.story[data-name=navmenu] { --hover-fg-color:black; }
|
||||
fieldset.web.wiki.portal>div.output>div.header div.story[data-name=navmenu] { --hover-fg-color:white; }
|
||||
fieldset.web.wiki.portal>div.output>div.header div.list { display:flex; }
|
||||
|
||||
body.mobile fieldset.web.wiki.portal { --portal-main-padding:10px; --legend-padding:10px; }
|
||||
body.web.wiki.portal.cmd { background-color:rgb(22 31 49); }
|
||||
body.web.wiki.portal fieldset.Action.home>div.toast { display:none; }
|
||||
body.mobile fieldset.web.wiki.portal { --portal-main-padding:5px; --legend-padding:10px; }
|
||||
body.mobile fieldset.web.wiki.portal>div.output>div.layout { display:block; }
|
||||
body.mobile fieldset.web.wiki.portal>div.output>div.layout>div.nav { height:400px; }
|
||||
body.mobile fieldset.web.wiki.portal>div.output>div.layout>div.main { height:unset; }
|
||||
body.mobile fieldset.web.wiki.portal>div.output>div.layout>div.main div.story.column { padding:10px 0 !important; }
|
||||
body.mobile fieldset.web.wiki.portal>div.output>div.layout>div.main fieldset { width:fit-content; }
|
||||
body.mobile fieldset.web.wiki.portal>div.output>div.layout>div.main fieldset>div.action { display:none; }
|
||||
body.mobile fieldset.web.wiki.portal.cmd>div.output>div.header div.story[data-name=navmenu] div.item { line-height:calc(var(--portal-header-height) - 2 * var(--legend-padding)); }
|
||||
body.mobile fieldset.web.wiki.portal.home>div.output>div.layout>div.main p { white-space:normal; text-align:center; }
|
||||
body.width2 fieldset.web.wiki.portal>div.output>div.layout>div.main>div.flex { flex-direction:column; }
|
||||
|
@ -81,12 +81,18 @@ func init() {
|
||||
}},
|
||||
web.DREAM_ACTION: {Hand: func(m *ice.Message, arg ...string) { web.DreamProcessIframe(m, arg...) }},
|
||||
}, web.ServeCmdAction(), web.DreamTablesAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||
if m.Push(HEADER, m.Cmdx(WORD, path.Join(nfs.USR_LEARNING_PORTAL, INDEX_SHY))); len(arg) > 0 {
|
||||
if m.Push(HEADER, m.Cmdx(WORD, _portal_path(m, INDEX_SHY))); len(arg) > 0 {
|
||||
kit.If(path.Join(arg...) == "commands", func() { _portal_commands(m, arg...) })
|
||||
m.Push(NAV, m.Cmdx(WORD, path.Join(nfs.USR_LEARNING_PORTAL, path.Join(arg...), INDEX_SHY)))
|
||||
m.Push(NAV, m.Cmdx(WORD, _portal_path(m, path.Join(arg...), INDEX_SHY)))
|
||||
}
|
||||
web.Count(m, "", path.Join(arg...))
|
||||
m.Display("")
|
||||
}},
|
||||
})
|
||||
}
|
||||
func _portal_path(m *ice.Message, arg ...string) (res string) {
|
||||
if !nfs.Exists(m, path.Join("src/document/", path.Join(arg...)), func(p string) { res = p }) {
|
||||
res = path.Join(nfs.USR_LEARNING_PORTAL, path.Join(arg...))
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
@ -1,32 +1,31 @@
|
||||
Volcanos(chat.ONIMPORT, {
|
||||
_init: function(can, msg) {
|
||||
// can.isCmdMode() && (can.user.toast = function() {})
|
||||
_init: function(can, msg, cb) { can.require(["/plugin/local/wiki/word.js"]), can.isCmdMode() && can.onappend.style(can, html.OUTPUT)
|
||||
var p = "/cmd/"+web.PORTAL; can.db.prefix = location.pathname.indexOf(p) > -1? location.pathname.split(p)[0]+p: nfs.WIKI_PORTAL
|
||||
var p = "/c/"+web.PORTAL; can.db.prefix = location.pathname.indexOf(p) > -1? location.pathname.split(p)[0]+p: nfs.WIKI_PORTAL
|
||||
can.db.current = can.isCmdMode()? can.base.trimPrefix(location.pathname, can.db.prefix+nfs.PS, can.db.prefix): can.Option(nfs.PATH)
|
||||
can.sup.onexport.link = function() { return can.misc.MergeURL(can, {pod: can.ConfSpace(), cmd: web.PORTAL}) }
|
||||
can.Conf(html.PADDING, can.page.styleValueInt(can, "--portal-main-padding", can._output))
|
||||
can.require(["/plugin/local/wiki/word.js"])
|
||||
can.Conf(html.PADDING, can.page.styleValueInt(can, "--portal-main-padding", can._output))
|
||||
can.onmotion.clear(can), can.isCmdMode() && can.onappend.style(can, html.OUTPUT)
|
||||
if (can.base.isIn(can.db.current, "", nfs.PS)) {
|
||||
can.onappend.style(can, ice.HOME)
|
||||
can.page.ClassList.add(can, can._root.Action._target, ice.HOME)
|
||||
} else {
|
||||
can.page.ClassList.del(can, can._fields, ice.HOME)
|
||||
can.page.ClassList.del(can, can._root.Action._target, ice.HOME)
|
||||
}
|
||||
can.ui = can.onappend.layout(can, [html.HEADER, [html.NAV, html.MAIN, html.ASIDE]], html.FLOW), can.onimport._scroll(can)
|
||||
can.ui.header.innerHTML = msg.Append(html.HEADER), can.ui.nav.innerHTML = msg.Append(html.NAV)
|
||||
if (msg.Append(html.NAV) == "") {
|
||||
can.onmotion.hidden(can, can.ui.nav), can.onmotion.hidden(can, can.ui.aside)
|
||||
can.base.isIn(can.db.current, "", nfs.PS) && can.onappend.style(can, ice.HOME), can.onimport.content(can, "content.shy")
|
||||
can.onimport.content(can, "content.shy")
|
||||
} else {
|
||||
can.page.styleWidth(can, can.ui.nav, 230), can.page.styleWidth(can, can.ui.aside, 200)
|
||||
if (can.ConfWidth() < 1000) { can.onmotion.hidden(can, can.ui.aside) }
|
||||
can.page.ClassList.del(can, can._fields, ice.HOME)
|
||||
}
|
||||
can.db.nav = {}
|
||||
can.page.Select(can, can._output, wiki.STORY_ITEM, function(target) { var meta = target.dataset||{}
|
||||
can.core.CallFunc([can.onimport, can.onimport[meta.name]? meta.name: meta.type||target.tagName.toLowerCase()], [can, meta, target])
|
||||
meta.style && can.page.style(can, target, can.base.Obj(meta.style))
|
||||
can.onmotion.delay(can, function() { can.Conf(html.PADDING, can.page.styleValueInt(can, "--portal-main-padding", can._output)), cb(msg)
|
||||
var file = can.isCmdMode()? can.db.hash[0]: can.Option(nfs.FILE); can.base.beginWith(file, nfs.SRC, nfs.USR) || (file = can.db.current+file)
|
||||
can.db.nav = {}, can.page.Select(can, can._output, wiki.STORY_ITEM, function(target) { var meta = target.dataset||{}
|
||||
can.core.CallFunc([can.onimport, can.onimport[meta.name]? meta.name: meta.type||target.tagName.toLowerCase()], [can, meta, target])
|
||||
meta.style && can.page.style(can, target, can.base.Obj(meta.style))
|
||||
}); var nav = can.db.nav[file]; nav && nav.click()
|
||||
})
|
||||
var file = can.isCmdMode()? can.base.trimPrefix(location.hash, "#"): can.Option(nfs.FILE)
|
||||
can.base.beginWith(file, nfs.SRC, nfs.USR) || (file = can.db.current+file)
|
||||
var nav = can.db.nav[file]; nav && nav.click()
|
||||
},
|
||||
_scroll: function(can) { can.ui.main.onscroll = function(event) { var top = can.ui.main.scrollTop, select
|
||||
can.page.SelectChild(can, can.ui.main, "h1,h2,h3", function(target) { if (!select && target.offsetTop > top) {
|
||||
@ -39,13 +38,10 @@ Volcanos(chat.ONIMPORT, {
|
||||
item.list && item.list.length > 0 || can.onaction.route(event, can, item.meta.link)
|
||||
}, target, can.page.ClassList.has(can, target.parentNode, html.HEADER)? function(target, item) {
|
||||
item.meta.link == nfs.USR_LEARNING_PORTAL+can.db.current && can.onappend.style(can, html.SELECT, target)
|
||||
}: function(target, item) { can.db.nav[can.base.trimPrefix(item.meta.link, nfs.USR_LEARNING_PORTAL)] = target
|
||||
}: function(target, item) { can.db.nav[can.base.trimPrefix(item.meta.link, nfs.USR_LEARNING_PORTAL, nfs.SRC_DOCUMENT)] = target
|
||||
location.hash || item.list && item.list.length > 0 || link || (link = can.onaction.route({}, can, item.meta.link, true))
|
||||
})
|
||||
},
|
||||
button: function(can, meta, target) { var item = can.base.Obj(meta.meta)
|
||||
target.onclick = function(event) { can.onaction.route(event, can, item.route) }
|
||||
},
|
||||
content: function(can, file) {
|
||||
can.runActionCommand(event, web.WIKI_WORD, [(can.base.beginWith(file, nfs.USR, nfs.SRC)? "": nfs.USR_LEARNING_PORTAL+can.db.current)+file], function(msg) { can.ui.main.innerHTML = msg.Result(), can.onmotion.clear(can, can.ui.aside)
|
||||
can.onimport._content(can, can.ui.main, function(target, meta) {
|
||||
@ -54,34 +50,31 @@ Volcanos(chat.ONIMPORT, {
|
||||
can.sup.onimport.size(can.sup, can.sup.ConfHeight(), can.sup.ConfWidth())
|
||||
})
|
||||
},
|
||||
layout: function(can, height, width) { can.onmotion.delay(can, function() { padding = can.Conf(html.PADDING)
|
||||
button: function(can, meta, target) { var item = can.base.Obj(meta.meta); target.onclick = function(event) { can.onaction.route(event, can, item.route) } },
|
||||
layout: function(can, height, width) {
|
||||
can.ui.layout(height, width), can.ConfHeight(can.ui.main.offsetHeight), can.ConfWidth(can.ui.main.offsetWidth)
|
||||
can.Conf(html.PADDING, can.page.styleValueInt(can, "--portal-main-padding", can._output))
|
||||
if (can.user.isMobile && can.isCmdMode()) {
|
||||
can.page.style(can, can.ui.nav, html.HEIGHT, "", html.WIDTH, can.page.width())
|
||||
can.page.style(can, can.ui.main, html.HEIGHT, "", html.WIDTH, can.page.width())
|
||||
}
|
||||
padding = can.Conf(html.PADDING)
|
||||
can.core.List(can._plugins, function(sub) { sub.onimport.size(sub, can.base.Min(can.ConfHeight()/2, 300, 600), sub.Conf("_width")||(can.ConfWidth()-2*padding), true) })
|
||||
}, 10) },
|
||||
},
|
||||
}, [""])
|
||||
Volcanos(chat.ONACTION, {
|
||||
route: function(event, can, route, internal) {
|
||||
var link = can.base.trimPrefix(route||"", nfs.USR_LEARNING_PORTAL); if (!link || link == can.db.current) { return }
|
||||
var link = can.base.trimPrefix(route||"", nfs.USR_LEARNING_PORTAL, nfs.SRC_DOCUMENT); if (!link || link == can.db.current) { return }
|
||||
if (!internal) { var params = ""; (can.misc.Search(can, log.DEBUG) == ice.TRUE && (params = "?debug=true"))
|
||||
if (link == nfs.PS) { return can.isCmdMode()? can.user.jumps(can.db.prefix+params): (can.Option(nfs.PATH, ""), can.Update()) }
|
||||
if (can.base.beginWith(link, web.HTTP, nfs.PS)) { return can.user.opens(link) }
|
||||
if (!can.base.beginWith(link, nfs.SRC, nfs.USR)) {
|
||||
if (link.indexOf(can.db.current) < 0 || link.endsWith(nfs.PS)) {
|
||||
return can.isCmdMode()? can.user.jumps(can.base.Path(can.db.prefix, link)+params): (can.Option(nfs.PATH, link), can.Update())
|
||||
}
|
||||
}
|
||||
if (!can.base.beginWith(link, nfs.SRC, nfs.USR)) { if (link.indexOf(can.db.current) < 0 || link.endsWith(nfs.PS)) {
|
||||
return can.isCmdMode()? can.user.jumps(can.base.Path(can.db.prefix, link)+params): (can.Option(nfs.PATH, link), can.Update())
|
||||
} }
|
||||
}
|
||||
var file = can.base.trimPrefix(link, can.db.current); can.isCmdMode() && can.user.jumps("#"+file)
|
||||
if (can.onmotion.cache(can, function(save, load) { save({plugins: can._plugins})
|
||||
return load(file, function(bak) { can._plugins = bak.file })
|
||||
}, can.ui.main, can.ui.aside)) { return file }
|
||||
can.onimport.content(can, file)
|
||||
can.user.toast(can, "加载成功")
|
||||
}, can.ui.main, can.ui.aside)) { return file } can.onimport.content(can, file)
|
||||
return link
|
||||
},
|
||||
})
|
||||
|
@ -18,6 +18,12 @@ import (
|
||||
func _word_show(m *ice.Message, name string, arg ...string) {
|
||||
kit.If(kit.HasPrefix(name, nfs.PS, web.HTTP), func() { m.Option(nfs.CAT_CONTENT, m.Cmdx(web.SPIDE, ice.OPS, web.SPIDE_RAW, http.MethodGet, name)) })
|
||||
m.Options(ice.SSH_TARGET, m.Target(), ice.SSH_ALIAS, mdb.Configv(m, mdb.ALIAS), TITLE, map[string]int{})
|
||||
if strings.HasPrefix(name, nfs.USR_LEARNING_PORTAL) {
|
||||
nfs.Exists(m, path.Join(nfs.SRC_DOCUMENT, strings.TrimPrefix(name, nfs.USR_LEARNING_PORTAL)), func(p string) { name = p })
|
||||
}
|
||||
if strings.HasPrefix(name, nfs.SRC_DOCUMENT) && !nfs.Exists(m, name) {
|
||||
name = path.Join(nfs.USR_LEARNING_PORTAL, strings.TrimPrefix(name, nfs.SRC_DOCUMENT))
|
||||
}
|
||||
m.Cmdy(ssh.SOURCE, name, kit.Dict(nfs.DIR_ROOT, _wiki_path(m)))
|
||||
}
|
||||
|
||||
@ -82,8 +88,6 @@ func init() {
|
||||
defer web.ToastProcess(m)()
|
||||
defer m.StatusTime(web.SPACE, m.Option(web.SPACE, ls[0]))
|
||||
}
|
||||
m.Info("what %v", arg)
|
||||
m.Info("what %v", arg)
|
||||
if len(arg) == 0 {
|
||||
m.Option(nfs.DIR_DEEP, ice.TRUE)
|
||||
arg = append(arg, nfs.SRC)
|
||||
|
Loading…
x
Reference in New Issue
Block a user