1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 08:48:06 +08:00
This commit is contained in:
IT 老营长 @云轩领航-创始人 2023-09-01 15:57:00 +08:00
parent ffd0ee57d0
commit 2fbaf9398a
10 changed files with 97 additions and 80 deletions

View File

@ -195,7 +195,7 @@ var chat = {
OUTPUT: "output", SIMPLE: "simple", FLOAT: "float", FULL: "full", CMD: "cmd",
HEADER: "Header", ACTION: "Action", FOOTER: "Footer",
libs: ["base.js", "core.js", "date.js", "misc.js", "page.js", "user.js"].map(function(p) { return "/volcanos/lib/"+p }),
libs: ["base.js", "core.js", "date.js", "misc.js", "page.js", "user.js"].map(function(p) { return "/lib/"+p }),
panel_list: [{name: "Header", style: "head"}, {name: "River", style: "left"}, {name: "Action", style: "main"}, {name: "Search", style: "auto"}, {name: "Footer", style: "foot"}],
plugin_list: [
"state.js",
@ -216,15 +216,15 @@ var chat = {
"local/wiki/word.js",
"local/team/plan.js",
"local/mall/goods.js",
].map(function(p) { return "/volcanos/plugin/"+p }).concat([
].map(function(p) { return "/plugin/"+p }).concat([
"/require/modules/bootstrap-icons/font/bootstrap-icons.min.css", // https://icons.getbootstrap.com/
]),
PLUGIN_LOCAL: "/volcanos/plugin/local/",
PLUGIN_STORY: "/volcanos/plugin/story/",
PLUGIN_INPUT: "/volcanos/plugin/input/",
PLUGIN_INPUT_JS: "/volcanos/plugin/input.js",
PLUGIN_TABLE_JS: "/volcanos/plugin/table.js",
PLUGIN_STATE_JS: "/volcanos/plugin/state.js",
PLUGIN_LOCAL: "/plugin/local/",
PLUGIN_STORY: "/plugin/story/",
PLUGIN_INPUT: "/plugin/input/",
PLUGIN_INPUT_JS: "/plugin/input.js",
PLUGIN_TABLE_JS: "/plugin/table.js",
PLUGIN_STATE_JS: "/plugin/state.js",
FRAME_JS: "/volcanos/frame.js",
ONENGINE: "onengine", ONDAEMON: "ondaemon", ONAPPEND: "onappend", ONLAYOUT: "onlayout", ONMOTION: "onmotion", ONKEYMAP: "onkeymap",
@ -308,6 +308,7 @@ var html = {PLUGIN_MARGIN: 10, ACTION_HEIGHT: 32, ACTION_MARGIN: 200,
DESKTOP: "desktop", DIV_DESKTOP: "div.desktop", DIV_EXPAND: "div.expand",
DIV_ITEM_SELECT: "div.item.select",
DIV_TABS_SELECT: "div.tabs.select",
DIV_PROFILE: "div.profile", DIV_DISPLAY: "div.display",
}
var svg = {
GROUP: "group", PID: "pid", GRID: "grid",

View File

@ -11,7 +11,9 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) {
can.core.CallFunc([sub.onaction, chat._INIT], {can: sub, cb: next, target: sub._target}), delete(sub._history), delete(sub._conf.feature)
}, target)
}, function() { can.onlayout._init(can, target), can.onmotion._init(can, target), can.onkeymap._init(can, target)
can.onengine.signal(can, chat.ONMAIN, can.request()), can.base.isFunc(cb) && cb(can), can.onengine._config(can)
can.onengine.signal(can, chat.ONMAIN, can.request()), can.base.isFunc(cb) && cb(can)
return
can.onengine._config(can)
}), can._path = location.href
},
_config: function(can) { can.require(["/require/src/conf.js"], function() {}, function(can, name, sub) {
@ -268,6 +270,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
field: function(can, type, item, target) { type = type||html.STORY, item = item||{}
var name = can.core.Split(item.nick||item.name||"").pop()||""; can.base.isIn(name, "server", "client", "studio") && (name = (item.index||"").split(".").slice(-2).join(".")), name = can.core.Keys(item.space, name)
var title = item.help && item.help != name && !can.user.isEnglish(can)? name+"("+can.core.Split(item.help)[0]+")": name
target = can.base.isFunc(target)? target(): target
return can.page.Append(can, target||can._output, [{view: [type, html.FIELDSET], list: [{type: html.LEGEND, list: [item.icon && {icon: item.icon}, {text: title}]}, {view: [html.OPTION, html.FORM]}, html.ACTION, html.OUTPUT, html.STATUS]}])
},
input: function(can, item, value, target, style) { if ([html.BR, html.HR].indexOf(item.type) > -1) { return can.page.Append(can, target, [item]) }

View File

@ -16,12 +16,12 @@ body {
--status-border:var(--box-border);
--panel-bg-color:var(--panel-output-bg-color);
--panel-fg-color:var(--panel-output-fg-color);
--panel-output-bg-color: var(--body-bg-color);
--panel-output-fg-color: var(--body-fg-color);
--panel-hover-bg-color:var(--hover-bg-color);
--panel-hover-fg-color:var(--hover-fg-color);
--plugin-border-color:var(--box-border); --plugin-radius:10px;
--plugin-bg-color:var(--body-bg-color);
--plugin-bg-color:var(--legend-bg-color);
--panel-output-bg-color:var(--input-bg-color);
--plugin-fg-color:var(--body-fg-color);
--th-bg-color:var(--plugin-bg-color);
--td-hover-bg-color:var(--hover-bg-color);

View File

@ -126,6 +126,11 @@ Volcanos("misc", {
} catch (e) { can.misc.Warn(e), msg.Reply() }
}) }
},
Resource(can, path) {
if (path.indexOf(nfs.PS) == 0 || path.indexOf(ice.HTTP) == 0) { return path }
return can.base.MergeURL("/require/"+path, ice.POD, can.Conf(web.SPACE)||can.Conf(ice.POD))
},
Template(can, path, file) { return can.base.Path(nfs.SRC_TEMPLATE, can.ConfIndex(), path, file) },
MergePath: function(can, file, path) { return file.indexOf(nfs.PS) == 0 || file.indexOf(ice.HTTP) == 0? file: can.base.Path(path, file) },
MergeCache: function(can, hash) { return can.misc.MergeURL(can, {_path: can.base.Path(web.SHARE_CACHE, hash)}, true) },
MergePodCmd: function(can, obj) {
@ -150,7 +155,8 @@ Volcanos("misc", {
for (var i = 1; i < ls.length; i += 2) { if (can.base.isIn(ls[i], [ice.POD, ice.CMD, web.WEBSITE])) { args[ls[i]] = ls[i+1] } }
return args
},
SplitPath: function(can, path) { var ls = path.split(nfs.PS); if (ls.length == 1) { return [nfs.PWD, ls[0]] }
SplitPath: function(can, path) {
var ls = path.split(nfs.PS); if (ls.length == 1) { return [nfs.PWD, ls[0]] }
if (ls[0] == ice.USR) { return [ls.slice(0, 2).join(nfs.PS)+nfs.PS, ls.slice(2).join(nfs.PS)] }
return [ls.slice(0, 1).join(nfs.PS)+nfs.PS, ls.slice(1).join(nfs.PS)]
},

View File

@ -207,6 +207,7 @@ Volcanos("page", {
case html.A: return "<a href='"+arg[1]+"' target='_blank'>"+(arg[2]||arg[1])+"</a>"
case html.IMG: return arg[2]? "<img src='"+arg[1]+"' height="+arg[2]+">": "<img src='"+arg[1]+"'>"
case html.SPAN:
arg[2] && typeof arg[2] == code.OBJECT && (arg[2] = arg[2].join(lex.SP))
return arg[2]? "<span class='"+arg[2]+"'>"+arg[1]+"</span>": arg[1]
default: /* type inner arg... */
var list = ["<"+type]; for (var i = 2; i < arg.length; i += 2) { list.push(lex.SP+arg[i]+mdb.EQ+arg[i+1]) }

View File

@ -1,41 +1,42 @@
fieldset.can.tinymce div.tox-tinymce,
fieldset.can.tinymce div.tox:not(.tox-tinymce-inline) .tox-editor-header {
fieldset.tinymce div.tox-tinymce,
fieldset.tinymce div.tox:not(.tox-tinymce-inline) .tox-editor-header {
border:none;
}
fieldset.can.tinymce div.tox-promotion { display:none; }
fieldset.can.tinymce div.tox div.tox-sidebar-wrap div.tox-edit-area iframe {
fieldset.tinymce div.tox-promotion { display:none; }
fieldset.tinymce div.tox div.tox-sidebar-wrap div.tox-edit-area iframe {
background-color:var(--output-bg-color);
}
div.tox .tox-collection--list .tox-collection__item--active,
div.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled),
fieldset.can.tinymce div.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active),
fieldset.can.tinymce div.tox .tox-mbtn:focus:not(:disabled),
fieldset.can.tinymce div.tox .tox-mbtn--active,
fieldset.can.tinymce div.tox .tox-tbtn:hover {
div.tox .tox-collection--list .tox-collection__item--enabled,
fieldset.tinymce div.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active),
fieldset.tinymce div.tox .tox-mbtn:focus:not(:disabled),
fieldset.tinymce div.tox .tox-mbtn--active,
fieldset.tinymce div.tox .tox-tbtn:hover {
background-color:var(--hover-bg-color);
color:var(--hover-fg-color);
}
div.tox .tox-menu,
div.tox .tox-collection__item,
fieldset.can.tinymce div.tox .tox-editor-header,
fieldset.can.tinymce div.tox .tox-menubar,
fieldset.can.tinymce div.tox .tox-toolbar,
fieldset.can.tinymce div.tox .tox-toolbar-overlord,
fieldset.can.tinymce div.tox .tox-toolbar__overflow,
fieldset.can.tinymce div.tox .tox-toolbar__primary,
fieldset.can.tinymce div.tox .tox-statusbar,
fieldset.can.tinymce div.tox .tox-statusbar__path-item,
fieldset.can.tinymce div.tox .tox-statusbar__wordcount,
fieldset.can.tinymce div.tox .tox-statusbar a,
fieldset.can.tinymce div.tox :not(svg):not(rect) {
fieldset.tinymce div.tox .tox-editor-header,
fieldset.tinymce div.tox .tox-mbtn,
fieldset.tinymce div.tox .tox-menubar,
fieldset.tinymce div.tox .tox-toolbar,
fieldset.tinymce div.tox .tox-toolbar-overlord,
fieldset.tinymce div.tox .tox-toolbar__overflow,
fieldset.tinymce div.tox .tox-toolbar__primary,
fieldset.tinymce div.tox .tox-statusbar,
fieldset.tinymce div.tox .tox-statusbar__path-item,
fieldset.tinymce div.tox .tox-statusbar__wordcount,
fieldset.tinymce div.tox .tox-statusbar a {
background-color:var(--plugin-bg-color);
color:var(--plugin-fg-color);
}
fieldset.can.tinymce div.tox .tox-tbtn svg,
fieldset.can.tinymce div.tox .tox-tbtn:disabled svg,
fieldset.can.tinymce div.tox .tox-tbtn:disabled:hover svg,
fieldset.can.tinymce div.tox .tox-tbtn--disabled svg,
fieldset.can.tinymce div.tox .tox-tbtn--disabled:hover svg,
fieldset.can.tinymce div.tox .tox-statusbar__branding svg {
fieldset.tinymce div.tox .tox-tbtn svg,
fieldset.tinymce div.tox .tox-tbtn:disabled svg,
fieldset.tinymce div.tox .tox-tbtn:disabled:hover svg,
fieldset.tinymce div.tox .tox-tbtn--disabled svg,
fieldset.tinymce div.tox .tox-tbtn--disabled:hover svg,
fieldset.tinymce div.tox .tox-statusbar__branding svg {
fill:var(--plugin-fg-color);
}

View File

@ -1,20 +1,28 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg, cb) { can.page.requireModules(can, can.Conf("modules"), function() {
var target = can.page.Appends(can, can._output, [{type: html.TEXTAREA}])._target
can.page.style(can, can._output, html.MAX_HEIGHT, "")
tinymce.init({target: target, height: can.ConfHeight(), // menubar: false,
_init: function(can, msg, cb) {
can.require(["/require/modules/tinymce/tinymce.min.js", "/plugin/local/code/vimer.js"], function(can) { can.onimport._last_init(can, msg, function(msg) {
can.onappend.style(can, "tinymce"), cb && cb(msg)
}) })
},
content: function(can, text) { return can.ui.editor.setContent(text) },
layout: function(can) { can.page.style(can, can.ui.content, html.HEIGHT, can.ConfHeight(), html.WIDTH, can.ConfWidth()) },
}, [""])
Volcanos(chat.ONSYNTAX, {
_split: function(can, msg, target) {
var _target = can.page.Appends(can, target, [{type: html.TEXTAREA}])._target
tinymce.init({target: _target, height: can.ConfHeight(), // menubar: false,
save_onsavecallback: function () { can.onaction.save({}, can, nfs.SAVE) },
content_style: "body#tinymce { background:transparent; color:silver; }",
toolbar: [
[
"code undo redo cut copy paste",
"backcolor forecolor bold italic underline strikethrough subscript superscript",
"alignleft aligncenter alignright alignjustify outdent indent",
"bullist numlist table image media link charmap",
"blockquote removeformat hr pagebreak anchor insertdatetime",
"fullscreen wordcount preview print help",
].join("|"),
],
toolbar: [[
"save code undo redo cut copy paste",
"backcolor forecolor bold italic underline strikethrough subscript superscript",
"alignleft aligncenter alignright alignjustify outdent indent",
"bullist numlist table image media link charmap",
"blockquote removeformat hr pagebreak anchor insertdatetime",
"fullscreen wordcount preview print help",
].join("|")],
plugins: [
"save",
"code",
"lists",
"advlist",
@ -32,8 +40,7 @@ Volcanos(chat.ONIMPORT, {
"preview",
"help",
"save",
// "autosave",
"autosave",
"codesample",
"directionality",
"emoticons",
@ -45,17 +52,16 @@ Volcanos(chat.ONIMPORT, {
"visualblocks",
"visualchars",
].join(" ")
}).then(function(list) { can.ui.editor = list[0], can.ui.editor.setContent(msg.Result()), cb && cb(msg) })
}) },
content: function(can, text) { return can.ui.editor.setContent(text) },
}, [""])
}).then(function(list) { can.ui.editor = list[0], can.ui.editor.setContent(msg.Result()) }).catch(function(err) { can.misc.Warn(err) })
},
})
Volcanos(chat.ONEXPORT, {
content: function(can) { return can.ui.editor.getContent() },
})
Volcanos(chat.ONPLUGIN, {
tinymce: shy("富文本", {
save: shy(function(can, msg) { can.user.toast(can, msg.Option(nfs.CONTENT)) }),
}, [nfs.PATH, ice.LIST, nfs.SAVE], function(can, msg, meta) {
}, [nfs.PATH, nfs.FILE, nfs.LINE, ice.LIST, nfs.SAVE], function(can, msg, meta) {
msg.Display(meta._path)
}),
})

View File

@ -1,31 +1,27 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg, cb) { var toast = can.user.toastProcess(can)
can.page.requireModules(can, ["monaco-editor/min/vs/loader.js"], function() {
_init: function(can, msg, cb) {
can.require(["/require/modules/monaco-editor/min/vs/loader.js"], function() {
require.config({paths: {vs: "/require/modules/monaco-editor/min/vs"}})
require(["vs/editor/editor.main"], function () {
can.require(["/plugin/local/code/vimer.js"], function(can) {
can.onimport._last_init(can, msg, function(msg) {
can.onappend.style(can, "monaco")
cb && cb(msg), toast.close()
})
})
can.require(["/plugin/local/code/vimer.js"], function(can) { can.onimport._last_init(can, msg, function(msg) {
can.onappend.style(can, "monaco"), cb && cb(msg)
}) })
})
})
},
_theme: function(can) {
if (can.base.isIn(can.getHeaderTheme(), html.LIGHT, html.WHITE)) {
monaco.editor.setTheme("vs")
} else {
monaco.editor.setTheme("vs-dark")
}
},
_theme: function(can) { if (can.base.isIn(can.getHeaderTheme(), html.LIGHT, html.WHITE)) { monaco.editor.setTheme("vs") } else { monaco.editor.setTheme("vs-dark") } },
layout: function(can) { can.page.style(can, can.ui.content, html.HEIGHT, can.ConfHeight(), html.WIDTH, can.ConfWidth()), can.ui.editor && can.ui.editor.layout() },
content: function(can, text) { return can.ui.editor.setValue(text) },
}, [""])
Volcanos(chat.ONSYNTAX, {
_split: function(can, msg, target) { can.onimport._theme(can)
can.onengine.listen(can, chat.ONTHEMECHANGE, function() { can.onimport._theme(can) })
can.ui.editor = monaco.editor.create(target, {value: msg.Result(), language: "javascript", automaticLayout: true})
_split: function(can, msg, target) { can.onimport._theme(can), can.onengine.listen(can, chat.ONTHEMECHANGE, function() { can.onimport._theme(can) })
can.ui.editor = monaco.editor.create(target, {value: msg.Result(), language: "javascript", automaticLayout: true, resize: true})
can.ui.editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, function () { can.onaction.save({}, can, nfs.SAVE) })
},
})
Volcanos(chat.ONEXPORT, {
content: function(can) { return can.ui.editor.getValue() },
})
Volcanos(chat.ONPLUGIN, {
monaco: shy("编辑器", {
save: shy(function(can, msg) { can.user.toast(can, msg.Option(nfs.CONTENT)) }),

View File

@ -113,7 +113,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear(
}}, "", target)
},
item: function(can, item, cb, cbs, target) { target = target||(can.ui && can.ui.project? can.ui.project: can._output)
var ui = can.page.Append(can, target, [{view: html.ITEM, list: [{icon: item.icon}, {text: item.nick||item.name||item.zone}], title: item.title, onclick: function(event) {
var ui = can.page.Append(can, target, [{view: html.ITEM, list: [item.icon && {icon: item.icon}, {text: item.nick||item.name||item.zone}], title: item.title, onclick: function(event) {
can.onmotion.select(can, target, html.DIV_ITEM, event.currentTarget)
cb(event, event.currentTarget, event.currentTarget._list && can.onmotion.toggle(can, event.currentTarget._list))
}, oncontextmenu: function(event) {
@ -230,6 +230,7 @@ Volcanos(chat.ONKEYMAP, {
Enter: shy("执行操作", function(event, can) { can.onaction.enter(event, can) }),
" ": shy("搜索项目", function(event, can) { can.ui.filter && (can.ui.filter.focus(), can.onkeymap.prevent(event)) }),
f: shy("搜索项目", function(event, can) { can.ui.filter && (can.ui.filter.focus(), can.onkeymap.prevent(event)) }),
a: shy("展示项目", function(event, can) { can.ui && can.ui.project && (can.onmotion.toggle(can, can.ui.project), can.onimport.layout(can)) }),
v: shy("展示预览", function(event, can) { can.ui && can.ui.profile && (can.onmotion.toggle(can, can.ui.profile), can.onimport.layout(can)) }),
r: shy("展示输出", function(event, can) { can.ui && can.ui.display && (can.onmotion.toggle(can, can.ui.display), can.onimport.layout(can)) }),
p: shy("添加插件", function(event, can) { can.sup.onaction["添加工具"](event, can.sup) }),

View File

@ -12,7 +12,7 @@ var Volcanos = shy({
var Config = name; name = Config.name||ice.CAN, _can_name = ""
meta.iceberg = Config.iceberg||meta.iceberg, meta.volcano = Config.volcano||meta.volcano
meta.libs = (Config.libs||chat.libs).concat(Config.list), panels = Config.panels||chat.panel_list, delete(Config.panels)
libs = [], panels.forEach(function(p) { p && (libs = libs.concat(p.list = p.list||["/volcanos/panel/"+p.name+nfs._JS, "/volcanos/panel/"+p.name+nfs._CSS])) }), libs = libs.concat(Config.plugins||chat.plugin_list)
libs = [], panels.forEach(function(p) { p && (libs = libs.concat(p.list = p.list||["/panel/"+p.name+nfs._JS, "/panel/"+p.name+nfs._CSS])) }), libs = libs.concat(Config.plugins||chat.plugin_list)
cb = can||function(can) {
can.require([can.frame], function() {
can.onengine._init(can, can.Conf(Config), panels, Config._init||meta._init, can._target)
@ -39,11 +39,13 @@ var Volcanos = shy({
if (libs[0][0] != nfs.PS && libs[0].indexOf(web.HTTP) != 0) { libs[0] = can._path.slice(0, can._path.lastIndexOf(ice.PS)+1)+libs[0] }
var name = (libs[0].indexOf(web.HTTP) == 0 || libs[0].indexOf("?pod=") > -1? libs[0]: libs[0].split(ice.QS)[0]).toLowerCase()
function next() { can._load(name, cbs), can.require(libs.slice(1), cb, cbs) }
if (meta.cache[name] || name == "") { return next() }
if (name.indexOf("/lib/") == 0) { name = "/volcanos"+name }
if (name.indexOf("/panel/") == 0) { name = "/volcanos"+name }
if (name.indexOf("/plugin/") == 0) { name = "/volcanos"+name }
if (name.indexOf("/volcanos/") == 0 && meta.volcano) { name = meta.volcano+name }
if (name.indexOf("/require/") == 0 && meta.iceberg) { name = meta.iceberg+name }
meta._load(name, next)
// meta.cache[name] || name == ""? next(): meta._load(name, next)
meta.cache[name]? next(): meta._load(name, next)
},
requestPodCmd: function(event) { return can.request(event, {space: can.Conf(web.SPACE), index: can.Conf(ctx.INDEX)}) },
request: function(event) { event = event||{}, event = event._event||event