mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 00:38:05 +08:00
add portal
This commit is contained in:
parent
899fab6bf6
commit
98be025830
7
frame.js
7
frame.js
@ -117,6 +117,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
var action = can.page.SelectOne(can, field, html.DIV_ACTION)
|
||||
var output = can.page.SelectOne(can, field, html.DIV_OUTPUT)
|
||||
var status = can.page.SelectOne(can, field, html.DIV_STATUS)
|
||||
can.base.isIn(meta.index, web.WIKI_PORTAL) && can.onappend.style(can, html.OUTPUT, field)
|
||||
var sub = Volcanos(meta.name, {_root: can._root||can, _follow: can.core.Keys(can._follow, meta.name), _target: field,
|
||||
_legend: legend, _option: option, _action: action, _output: output, _status: status, _history: [],
|
||||
Status: function(key, value) { if (can.base.isObject(key)) { return can.core.Item(key, sub.Status), key }
|
||||
@ -150,7 +151,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
sub.isCmdMode() && can.onappend.style(sub, can.misc.Search(can, ctx.STYLE)), sub.isCmdMode() && sub.Conf(can.misc.Search(can))
|
||||
can.base.isFunc(cb) && cb(sub)
|
||||
if (can.user.isMobile && !can.user.isLandscape()) { return } if (can.page.ClassList.has(can, sub._target, html.OUTPUT)) { return }
|
||||
sub.isCmdMode() && !can.base.isIn(meta.index, web.CODE_VIMER, web.CODE_INNER, web.CHAT_MACOS_DESKTOP) && can.page.insertBefore(can, can.user.header(can), sub._output, sub._fields)
|
||||
// sub.isCmdMode() && !can.base.isIn(meta.index, web.CODE_VIMER, web.CODE_INNER, web.CHAT_MACOS_DESKTOP) && can.page.insertBefore(can, can.user.header(can), sub._output, sub._fields)
|
||||
}); return sub
|
||||
},
|
||||
_option: function(can, meta, option, skip) { var index = -1, args = can.base.Obj(meta.args||meta.arg, []), opts = can.base.Obj(meta.opts, {})
|
||||
@ -350,7 +351,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()||""; name = can.core.Keys(item.space, name)
|
||||
var title = !item.help || item.help == name || can.user.language(can) == "en"? name: name+"("+can.core.Split(item.help)[0]+")"
|
||||
return can.page.Append(can, target||can._output, [{view: [type, html.FIELDSET], list: [{text: [title, html.LEGEND]}, {view: [html.OPTION, html.FORM]}, html.ACTION, html.OUTPUT, html.STATUS]}])
|
||||
return can.page.Append(can, target||can._output, [{view: [type, html.FIELDSET], list: [{type: html.LEGEND, list: [{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]) }
|
||||
var icon = [], _item = can.base.Copy({className: "", type: "", name: ""}, item), input = can.page.input(can, _item, value)
|
||||
@ -365,7 +366,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
}).length+" lines") } }
|
||||
icon.push({icon: mdb.DELETE, onclick: function(event) { _input.value = "", item.name == html.FILTER && can.page.Select(can, can._output, html.TR, function(tr) { can.page.ClassList.del(can, tr, html.HIDE) }) }})
|
||||
} if (item.range) { input._init = function(target) { can.onappend.figure(can, item, target, function(sub, value, old) { target.value = value, can.core.CallFunc([can.onaction, item.name], [event, can, item.name]) }) } }
|
||||
var _input = can.page.Append(can, target, [{view: [[html.ITEM].concat(style, [item.type, item.name])], list: [input].concat(icon), _init: function(target, _input) {
|
||||
var _input = can.page.Append(can, target, [{view: [[html.ITEM].concat(style, [item.type, item.name])], list: [{icon: item.icon}, input].concat(icon), _init: function(target, _input) {
|
||||
if (item.type == html.SELECT) { _input.select.value = value||_item.value||_item.values[0], can.onappend.select(can, _input.select, _item) }
|
||||
item.style && can.onappend.style(can, item.style, target)
|
||||
}}])[item.name]; return _input
|
||||
|
101
index.css
101
index.css
@ -70,7 +70,7 @@ body>div.upload div.status div.cost { float:left; }
|
||||
body>div.upload div.status div.show { float:right; }
|
||||
body>div.upload div.status div.size { text-align:center; }
|
||||
/* font */
|
||||
legend { font-size:1.2rem; line-height:30px; height:32px; }
|
||||
legend { font-size:1.2rem; line-height:32px; height:32px; }
|
||||
select, input { font-size:1rem; height:32px; } textarea::placeholder, input::placeholder { font-style:italic; }
|
||||
textarea { font-size:1rem; tab-size:2; padding:5px; height:96px; width:100%; resize:vertical; }
|
||||
table.content, div.item, div.code, div.story[data-type=spark] { font-family:monospace; }
|
||||
@ -128,6 +128,7 @@ fieldset.float>div.action>div.button.icons>input { display:none; }
|
||||
fieldset.full>div.action>div.button.icons>input { display:none; }
|
||||
fieldset.cmd>div.action>div.button.icons>input { display:none; }
|
||||
body.windows form.option>div.icon { font-size:21px; }
|
||||
legend>i:first-child { margin-right:10px; } div.item>i:first-child { margin-right:10px; }
|
||||
fieldset.float div.text:hover>span.icon.delete { visibility:hidden; }
|
||||
fieldset.float>form.option>div.text>input { display:none; }
|
||||
fieldset.float>form.option>div.text>span { display:none; }
|
||||
@ -179,13 +180,14 @@ fieldset.output>legend { display:none; }
|
||||
fieldset.output>form.option { display:none; }
|
||||
fieldset.output>div.action { display:none; }
|
||||
fieldset.output>div.status { display:none; }
|
||||
fieldset.output>div.item { display:none; }
|
||||
fieldset>form.option>div.item.select, fieldset>div.action>div.item.select { border-radius:5px; }
|
||||
fieldset>form.option, fieldset>div.action { display:contents; } form.option.hide, div.action.hide, .hidden, .hide { display:none; }
|
||||
div.action, div.output, div.status, div.project, div.content, div.profile, div.display, table.content, table.content td, div.list, div.code, div.story, div.float, fieldset.float { overflow:auto; }
|
||||
legend, form.option, form.option>div.item, div.action, div.action>div.item, div.action>div.tabs, fieldset>div.status>div.item { float:left; }
|
||||
fieldset.story, div.output, fieldset>div.status, div.project div.item, div.content:not(.item), div.code, div.story[data-type=spark] { clear:both; }
|
||||
div.output { position:relative; } div.layout.flex>* { float:left; clear:none; }
|
||||
fieldset.auto, fieldset.full, fieldset.float, div.float { position:fixed; z-index:10; }
|
||||
fieldset.auto, fieldset.full, fieldset.float, div.float { position:fixed; z-index:100; }
|
||||
fieldset.cmd fieldset.plug { position:fixed; bottom:32px; right:0; }
|
||||
fieldset.plug { position:absolute; bottom:0; right:0; }
|
||||
fieldset.full { position:fixed; left:0; top:0; }
|
||||
@ -214,51 +216,60 @@ body {
|
||||
--danger-bg-color:red; --danger-fg-color:white;
|
||||
--create-bg-color:blue; --create-fg-color:white;
|
||||
--disable-fg-color:gray;
|
||||
|
||||
--code-comment:darkgray;
|
||||
--code-keyword:darkblue;
|
||||
--code-package:blue;
|
||||
--code-datatype:cornflowerblue;
|
||||
--code-function:darkcyan;
|
||||
--code-constant:gray;
|
||||
--code-string:brown;
|
||||
--code-object:purple;
|
||||
}
|
||||
body { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body legend { background-color:var(--legend-bg-color); border-radius:var(--input-radius); }
|
||||
body legend:hover { color:var(--hover-fg-color) }
|
||||
body select { border-radius:var(--input-radius); }
|
||||
body input { background-color:var(--input-bg-color); color:var(--input-fg-color); border-radius:var(--input-radius); }
|
||||
body input:hover { color:var(--hover-fg-color) }
|
||||
body input:not([type=button]) { border-radius:0; }
|
||||
body input:not([type=button]):hover { border:var(--input-border); }
|
||||
body input:not([type=button]):focus { border:var(--input-border); outline:none; }
|
||||
body textarea { background-color:var(--input-bg-color); color:var(--input-fg-color); }
|
||||
body table.content tr:hover { background-color:var(--tr-hover-bg-color); color:var(--hover-fg-color); }
|
||||
body table.content th { background-color:var(--th-bg-color); color:var(--th-fg-color); }
|
||||
body table.content td:hover { background-color:var(--td-hover-bg-color); }
|
||||
body table.content td.select { background-color:var(--td-hover-bg-color); }
|
||||
body table.content.action td:last-child { background-color:var(--th-bg-color); }
|
||||
body h1:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
body h2:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
body h3:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
body div.item:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
body div.item.select { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
body span.item:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
body span.item.select { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
body span.icon:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
body div.action div.tabs:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
body div.action div.tabs.select { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
body div.output { background-color:var(--output-bg-color); }
|
||||
body fieldset>div.status { border-top:var(--status-border); }
|
||||
body fieldset:not(.panel) { background-color:var(--plugin-bg-color); color:var(--plugin-fg-color); border-radius:var(--plugin-radius); }
|
||||
body fieldset.panel:not(.main) { background-color:var(--panel-bg-color); color:var(--panel-fg-color); }
|
||||
body fieldset.panel:not(.main)>div.output { background-color:var(--panel-output-bg-color); color:var(--panel-output-fg-color); }
|
||||
body fieldset.input div.output { background-color:var(--plugin-bg-color); }
|
||||
body fieldset.input tr:hover { background-color:var(--tr-hover-bg-color); }
|
||||
body fieldset.input td:hover { background-color:var(--td-hover-bg-color); }
|
||||
body div.float { background-color:var(--float-bg-color); color:var(--float-fg-color); }
|
||||
body div.carte div.item { background-color:var(--carte-bg-color); }
|
||||
body div.carte div.item:hover { background-color:var(--hover-bg-color); }
|
||||
body div.zone>div.item { background-color:var(--th-bg-color); }
|
||||
body div.zone>div.list>div.zone>div.item { background-color:var(--th-bg-color); }
|
||||
body div.tabs div { background-color:var(--plugin-bg-color); }
|
||||
body div.tabs div:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
body div.tabs div.select { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
body div.plug legend { background-color:var(--output-bg-color); }
|
||||
body div.plug legend.select { background-color:var(--plugin-bg-color); }
|
||||
body div.complete>table { background-color:var(--plugin-bg-color); }
|
||||
legend { background-color:var(--legend-bg-color); border-radius:var(--input-radius); }
|
||||
legend:hover { color:var(--hover-fg-color) }
|
||||
select { border-radius:var(--input-radius); }
|
||||
input { background-color:var(--input-bg-color); color:var(--input-fg-color); border-radius:var(--input-radius); }
|
||||
input:hover { color:var(--hover-fg-color) }
|
||||
input:not([type=button]) { border-radius:0; }
|
||||
input:not([type=button]):hover { border:var(--input-border); }
|
||||
input:not([type=button]):focus { border:var(--input-border); outline:none; }
|
||||
textarea { background-color:var(--input-bg-color); color:var(--input-fg-color); }
|
||||
table.content tr:hover { background-color:var(--tr-hover-bg-color); color:var(--hover-fg-color); }
|
||||
table.content th { background-color:var(--th-bg-color); color:var(--th-fg-color); }
|
||||
table.content td:hover { background-color:var(--td-hover-bg-color); }
|
||||
table.content td.select { background-color:var(--td-hover-bg-color); }
|
||||
table.content.action td:last-child { background-color:var(--th-bg-color); }
|
||||
h1:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
h2:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
h3:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
div.item:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
div.item.select { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
span.item:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
span.item.select { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
span.icon:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
div.action div.tabs:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
div.action div.tabs.select { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
div.output { background-color:var(--output-bg-color); }
|
||||
fieldset>div.status { border-top:var(--status-border); }
|
||||
fieldset:not(.panel) { background-color:var(--plugin-bg-color); color:var(--plugin-fg-color); border-radius:var(--plugin-radius); }
|
||||
fieldset.panel:not(.main) { background-color:var(--panel-bg-color); color:var(--panel-fg-color); }
|
||||
fieldset.panel:not(.main)>div.output { background-color:var(--panel-output-bg-color); color:var(--panel-output-fg-color); }
|
||||
fieldset.input div.output { background-color:var(--plugin-bg-color); }
|
||||
fieldset.input tr:hover { background-color:var(--tr-hover-bg-color); }
|
||||
fieldset.input td:hover { background-color:var(--td-hover-bg-color); }
|
||||
div.float { background-color:var(--float-bg-color); color:var(--float-fg-color); }
|
||||
div.carte div.item { background-color:var(--carte-bg-color); }
|
||||
div.carte div.item:hover { background-color:var(--hover-bg-color); }
|
||||
div.zone>div.item { background-color:var(--th-bg-color); }
|
||||
div.zone>div.list>div.zone>div.item { background-color:var(--th-bg-color); }
|
||||
div.tabs div { background-color:var(--plugin-bg-color); }
|
||||
div.tabs div:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
div.tabs div.select { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
div.plug legend { background-color:var(--output-bg-color); }
|
||||
div.plug legend.select { background-color:var(--plugin-bg-color); }
|
||||
div.complete>table { background-color:var(--plugin-bg-color); }
|
||||
|
||||
body.light fieldset.panel:not(.main)>div.output div.state:hover { background-color:var(--panel-hover-bg-color); color:var(--panel-hover-fg-color); }
|
||||
body.light fieldset.panel:not(.main)>div.output div.title:hover { background-color:var(--panel-hover-bg-color); color:var(--panel-hover-fg-color); }
|
||||
|
17
lib/page.js
17
lib/page.js
@ -55,7 +55,11 @@ Volcanos("page", {
|
||||
} else if (item.text) { var list = can.core.List(item.text); if (can.base.isArray(list[2])) { list[2] = list[2].join(lex.SP) }
|
||||
data.innerHTML = list[0]||data.innerHTML||"", type = list[1]||item.type||html.SPAN, list[2] && can.page.ClassList.add(can, data, list[2])
|
||||
} else if (item.icon) { var list = can.core.List(item.icon)
|
||||
type = html.SPAN, name = list[0], data.className = "icon "+list[0], data.innerText = can.page.unicode[list[0]]
|
||||
if (can.page.unicode[list[0]]) {
|
||||
type = html.SPAN, name = list[0], data.className = "icon "+list[0], data.innerText = can.page.unicode[list[0]]
|
||||
} else {
|
||||
type = "i", data.className = list[0]
|
||||
}
|
||||
} else if (item.button) { var list = can.core.List(item.button); type = html.BUTTON, name = list[0]||name, data.innerText = can.user.trans(can, name)
|
||||
data.onclick = function(event) { can.misc.Event(event, can, function(msg) { can.base.isFunc(list[1]) && list[1](event, name), can.onkeymap.prevent(event) }) }
|
||||
} else if (item.select) { var list = item.select; type = html.SELECT, name = list[0][0], data.className = data.className||list[0][0]
|
||||
@ -157,6 +161,11 @@ Volcanos("page", {
|
||||
isclose && {view: [[html.ITEM, html.HIDE]], list: [{text: " "}, {className: code.KEYWORD, text: can.page.replace(can, ice.LT+nfs.PS+tag+ice.GT)}], _init: function(target) { ui.close = target }},
|
||||
]}
|
||||
},
|
||||
AppendStyle: function(can, style) {
|
||||
var styleElement = document.createElement('style'); styleElement.type = 'text/css'
|
||||
document.getElementsByTagName('head')[0].appendChild(styleElement)
|
||||
styleElement.appendChild(document.createTextNode(style))
|
||||
},
|
||||
AppendTable: function(can, msg, target, list, cb) { if (!msg.append||msg.append.length == 0) { return }
|
||||
var ui = can.page.Append(can, target, [{type: html.TABLE, list: [{type: html.THEAD}, {type: html.TBODY}]}])
|
||||
can.page.Append(can, ui.thead, [{data: {dataset: {index: -1}}, th: can.core.List(list, function(key) { if (key[0] != "_") { return key } }) }])
|
||||
@ -320,4 +329,10 @@ Volcanos("page", {
|
||||
return canvas.toDataURL(nfs.IMAGE_PNG, 1)
|
||||
},
|
||||
position: function(event, target) { var p = target.getBoundingClientRect(); return {x: event.clientX - p.x, y: event.clientY - p.y} },
|
||||
theme: function(cb) {
|
||||
var themeMedia = window.matchMedia("(prefers-color-scheme: dark)")
|
||||
cb && themeMedia.addListener(function(event) { cb(event.matches? html.DARK: html.LIGHT) })
|
||||
cb && cb(themeMedia.matches? html.DARK: html.LIGHT)
|
||||
return themeMedia.matches? html.DARK: html.LIGHT
|
||||
},
|
||||
})
|
||||
|
@ -100,7 +100,7 @@ Volcanos("user", {
|
||||
close: function(event) { can.page.Remove(can, ui._target), action.timer.stop = true },
|
||||
cancel: function(event) { can.page.Remove(can, ui._target), action.timer.stop = true },
|
||||
timer: can.core.Timer({interval: 100, length: (meta.duration||1000)/100}, function(event, interval, index) {
|
||||
if (index > 30) { ui.duration.innerHTML = index/10+"s..." }
|
||||
if (index > 30) { ui.duration.innerHTML = index/10+(index%10==0?".0":"")+"s..." }
|
||||
}, function() { action.close() }), _target: ui._target,
|
||||
}); can.onmotion.story.auto(can, ui._target), meta.resize && can.onmotion.delayResize(can, ui._target, meta.resize)
|
||||
return can._toast && (can._toast.close(), delete(can._toast)), can._toast = action
|
||||
@ -160,7 +160,7 @@ Volcanos("user", {
|
||||
}, _enter: function(event) { return action.submit(event, can, html.SUBMIT), true }}, item), target)
|
||||
}, item.onkeydown = function(event) { if (event.key == lang.ESCAPE) { event.target.blur() } }
|
||||
return {type: html.TR, list: [
|
||||
{type: html.TD, list: [{text: [item.name||"", html.LABEL]}]}, {type: html.TD, list: [{text: item.need == "must"? "*": "", style: {color: cli.RED}}]},
|
||||
{type: html.TD, list: [{text: [can.user.trans(can, item.name||"", item._trans), html.LABEL]}]}, {type: html.TD, list: [{text: item.need == "must"? "*": "", style: {color: cli.RED}}]},
|
||||
{type: html.TD, list: [can.page.input(can, item), item.type == html.TEXT && {icon: "delete", onclick: function(event) { event.target.previousSibling.value = "" }}]},
|
||||
]}
|
||||
})}]}, html.ACTION,
|
||||
@ -257,7 +257,8 @@ Volcanos("user", {
|
||||
logout: function(can) { can.user.toastConfirm(can, aaa.LOGOUT, "", function() { can.runAction({}, aaa.LOGOUT, [], function(msg) {
|
||||
can.misc.Search(can, chat.SHARE)? can.misc.Search(can, chat.SHARE, ""): can.user.reload(true)
|
||||
}) }) },
|
||||
header: function(can) { var header = can._root.Header
|
||||
header: function(can) { if (!can._root) { return }
|
||||
var header = can._root.Header
|
||||
var meta = {
|
||||
time: {view: [[html.ITEM, mdb.TIME]], _init: function(target) {
|
||||
can.core.Timer({interval: 100}, function() { can.page.Modify(can, target, can.user.time(can, null, "%H:%M:%S %w")) })
|
||||
|
@ -3,8 +3,8 @@
|
||||
"background": {"page": "/publish/chrome/daemon.html"},
|
||||
"browser_action": {"default_popup": "/publish/chrome/popup.html"},
|
||||
"content_scripts": [
|
||||
{"matches": [""], "permissions": [
|
||||
{"matches": ["<all_urls>"], "permissions": [
|
||||
"tabs", "history", "cookies", "bookmarks", "contextMenus", "notifications", "http://localhost:9020/*"
|
||||
], "css": ["/page/can.css"], "js": ["/page/can.js", "/publish/chrome/contexts.js"]}
|
||||
], "css": ["/publish/chrome/contexts.css"], "js": ["/proto.js", "/page/cache.js", "/publish/chrome/contexts.js"]}
|
||||
]
|
||||
}
|
@ -22,7 +22,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { var river = can.Conf(chat.R
|
||||
}, oncontextmenu: sub._legend.onclick}]; sub._header_tabs = can.page.Append(can, can._header_tabs, tabs)._target, sub._tabs = can.page.Append(can, can._action, tabs)._target
|
||||
},
|
||||
_menu: function(can, msg) { if (can.user.isMobile) { return }
|
||||
var target = can.setHeaderMenu(can.base.Obj(can.Conf(chat.MENUS)||msg.Option(chat.MENUS), can.onaction._menus), function(event, button, list) { can.core.CallFunc([can.onaction, list[0]], [can, button]) })
|
||||
var target = can.setHeaderMenu(can.base.Obj(can.Conf(chat.MENUS)||msg.Option(chat.MENUS), can.onaction._menus), function(event, button, list) { list && can.core.CallFunc([can.onaction, list[0]], [can, button]) })
|
||||
can.onmotion.hidden(can, can._header_tabs = can.page.Append(can, target, [html.TABS])._target)
|
||||
},
|
||||
})
|
||||
|
@ -14,7 +14,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.Conf(NKEY, can.
|
||||
], onclick: function(event) { can.onexport[item](can) }}])
|
||||
}) },
|
||||
_toast: function(can, msg, target) { can.ui.toast = can.page.Append(can, target, [{view: [[html.ITEM, chat.TOAST]], onclick: function(event) { can.onexport[NTIP](can) }}])._target },
|
||||
_command: function(can, msg, target) { can.onappend.input(can, {type: html.TEXT, name: ice.CMD, onkeydown: function(event) { can.onkeymap.input(event, can)
|
||||
_command: function(can, msg, target) { can.onappend.input(can, {type: html.TEXT, icon: "bi bi-terminal", name: ice.CMD, onkeydown: function(event) { can.onkeymap.input(event, can)
|
||||
function close() { can.ui.cli && can.ui.cli.onaction.close() } if (event.key == lang.ESCAPE) { return close() } if (event.key != lang.ENTER) { return }
|
||||
close(); switch (event.target.value) {
|
||||
case cli.CLEAR:
|
||||
|
@ -1,7 +1,7 @@
|
||||
Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
|
||||
can.onimport._title(can, msg, target), can.onimport._state(can, msg, target), can.onimport._avatar(can, msg, target), can.onimport._background(can, msg, target), can.onimport._search(can, msg, target)
|
||||
},
|
||||
_title: function(can, msg, target) { can.user.isMobile || can.core.List(can.base.getValid(can.Conf(chat.TITLE)||location.host||msg.result, [location.host]), function(item) {
|
||||
_title: function(can, msg, target) { can.user.isMobile || can.core.List(can.base.getValid(can.Conf(chat.TITLE)||(can.user.isExtension? "chrome": location.host)||msg.result, [location.host]), function(item) {
|
||||
can.page.Append(can, target, [{view: [[html.ITEM, chat.TITLE], "", item], title: "返回主页", onclick: function(event) { can.onaction.title(event, can) }}])
|
||||
}) },
|
||||
_state: function(can, msg, target) { can.core.List(can.base.Obj(can.Conf(chat.STATE)||msg.Option(chat.STATE), [aaa.USERNICK, aaa.AVATAR, mdb.TIME]).reverse(), function(item) {
|
||||
@ -19,7 +19,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
|
||||
// window.parent == window? can.onlayout.background(can, can.onexport.background(can)): can.page.style(can, document.body, html.BACKGROUND_COLOR, "transparent")
|
||||
},
|
||||
_search: function(can, msg, target) {
|
||||
can._search = can.onappend.input(can, {type: html.TEXT, name: mdb.SEARCH, onkeydown: function(event) { can.onkeymap.input(event, can)
|
||||
can._search = can.onappend.input(can, {type: html.TEXT, icon: "bi bi-search", name: mdb.SEARCH, onkeydown: function(event) { can.onkeymap.input(event, can)
|
||||
event.key == lang.ENTER && can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: mdb.FOREACH, word: event.target.value||""}))
|
||||
}}, "", target, [chat.TITLE])
|
||||
can.onimport.menu(can, mdb.SEARCH, function() { can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: mdb.FOREACH, word: can._search.value||""})) })
|
||||
@ -45,10 +45,8 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
|
||||
}) }])._target
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONACTION, {_init: function(can) { var themeMedia = window.matchMedia("(prefers-color-scheme: dark)")
|
||||
can.__theme = themeMedia.matches? html.DARK: html.LIGHT, themeMedia.addListener(function(event) { can.__theme = event.matches? html.DARK: html.LIGHT
|
||||
can.onengine.signal(can, chat.ONTHEMECHANGE, can.request(event, {theme: can.__theme}))
|
||||
}), can.onimport.theme(can)
|
||||
Volcanos(chat.ONACTION, {_init: function(can) {
|
||||
can.page.theme(function(theme) { can.onengine.signal(can, chat.ONTHEMECHANGE, can.request(event, {theme: can.__theme = theme})) }), can.onimport.theme(can)
|
||||
return can.require([
|
||||
"src/template/web.chat.header/dark.css",
|
||||
"src/template/web.chat.header/light.css",
|
||||
|
@ -9,10 +9,10 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onimport._main(can, msg
|
||||
can._main_river = ls[0]||can.misc.SearchOrConf(can, chat.RIVER)||msg.Option(ice.MSG_RIVER)||"project"
|
||||
can._main_storm = ls[1]||can.misc.SearchOrConf(can, chat.STORM)||msg.Option(ice.MSG_STORM)||"studio"
|
||||
},
|
||||
_river: function(can, meta, cb) { return {view: [html.ITEM, "", meta.name], _init: function(target) { can.ui.river_list[meta.hash] = target, cb(target) },
|
||||
_river: function(can, meta, cb) { return {view: html.ITEM, list: [{icon: meta.icon}, {text: meta.name}], _init: function(target) { can.ui.river_list[meta.hash] = target, cb(target) },
|
||||
onclick: function(event) { can.onaction.storm(event, can, meta.hash) }, oncontextmenu: function(event) { can.onaction.carte(event, can, can.onaction._menu, meta.hash) },
|
||||
} },
|
||||
_storm: function(can, meta, river) { return {view: [html.ITEM, "", meta.name], _init: function(target) { can.ui.storm_list[can.core.Keys(river, meta.hash)] = target },
|
||||
_storm: function(can, meta, river) { return {view: html.ITEM, list: [{icon: meta.icon}, {text: meta.name}], _init: function(target) { can.ui.storm_list[can.core.Keys(river, meta.hash)] = target },
|
||||
onclick: function(event) { can.onaction.action(event, can, river, meta.hash) }, oncontextmenu: function(event) { can.onaction.carte(event, can, can.ondetail._menu, river, meta.hash) },
|
||||
} },
|
||||
_menu: function(can, msg) { can.user.isMobile || can.user.mod.isPod || can.onappend._action(can, can.onaction.list, can._action) },
|
||||
@ -31,6 +31,7 @@ Volcanos(chat.ONACTION, {list: [mdb.CREATE, web.SHARE, web.REFRESH], _init: func
|
||||
create: function(event, can) { can.user.input(can.request(event, {title: "创建群组"}), can, [
|
||||
{name: mdb.TYPE, values: [aaa.TECH, aaa.ROOT, aaa.TECH, aaa.VOID], _trans: "类型"},
|
||||
{name: mdb.NAME, value: "hi", _trans: "群名", need: "must"},
|
||||
{name: mdb.ICON, value: "", _trans: "图标"},
|
||||
{name: mdb.TEXT, value: "hello", _trans: "简介"},
|
||||
], function(args) {
|
||||
can.runAction(event, mdb.CREATE, args, function(msg) { can.misc.Search(can, {river: msg.Result()}) })
|
||||
@ -89,7 +90,10 @@ Volcanos(chat.ONDETAIL, {
|
||||
can.onmotion.delay(can, function() { toast.close(), next(), index == array.length-1 && can.user.toastSuccess(can) })
|
||||
})
|
||||
}) },
|
||||
addcmd: function(event, can, button, river, storm) { can.user.input(can.request(event, {title: "添加工具"}), can, [{name: web.SPACE, value: can.misc.Search(can, ice.POD)||""}, {name: ctx.INDEX, need: "must"}, ctx.ARGS, ctx.DISPLAY, ctx.STYLE], function(args) {
|
||||
addcmd: function(event, can, button, river, storm) { can.user.input(can.request(event, {title: "添加工具"}), can, [
|
||||
{name: web.SPACE, value: can.misc.Search(can, ice.POD)||""},
|
||||
mdb.ICON, {name: ctx.INDEX, need: "must"}, ctx.ARGS, ctx.DISPLAY, ctx.STYLE,
|
||||
], function(args) {
|
||||
can.run({}, [river, storm, chat.STORM, ctx.ACTION, mdb.INSERT].concat(args), function(msg) {
|
||||
can.onengine.signal(can, chat.ONSTORM_SELECT, can.request(event, {river: can.Conf(chat.RIVER, river), storm: can.Conf(chat.STORM, storm), refresh: ice.TRUE}))
|
||||
})
|
||||
@ -100,6 +104,7 @@ Volcanos(chat.ONDETAIL, {
|
||||
remove: function(event, can, button, river, storm) { can.run(event, [river, storm, chat.STORM, ctx.ACTION, mdb.REMOVE], function(msg) { can.misc.Search(can, {river: river, storm: ""}) }) },
|
||||
create: function(event, can, button, river) { can.user.input(can.request(event, {title: "添加应用"}), can, [
|
||||
{name: mdb.NAME, value: "hi", _trans: "名称", need: "must"},
|
||||
{name: mdb.ICON, value: "", _trans: "图标"},
|
||||
{name: mdb.TEXT, value: "hello", _trans: "简介"},
|
||||
], function(args) {
|
||||
can.run({}, [river, chat.STORM, ctx.ACTION, mdb.CREATE].concat(args), function(msg) { can.misc.Search(can, {river: river, storm: msg.Result()}) })
|
||||
@ -113,11 +118,11 @@ Volcanos(chat.ONEXPORT, {width: function(can) { return can._target.offsetWidth }
|
||||
Volcanos(chat.ONENGINE, {_engine: function(event, can, msg, panel, cmds, cb) { var list = can.river
|
||||
cmds.length == 0 && can.core.ItemOrder(list, "order", function(key, value) {
|
||||
if (can.user.info.userrole == aaa.ROOT || can.base.isIn(value.type||"", "", aaa.VOID, can.user.info.userrole)) {
|
||||
can.core.Item(value.storm).length > 0 && msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name})
|
||||
can.core.Item(value.storm).length > 0 && msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name, icon: value.icon||""})
|
||||
}
|
||||
})
|
||||
if (cmds.length != 1 && cmds[1] != chat.STORM) { return false } var river = list[cmds[0]]; if (!river) { return false }
|
||||
can.core.ItemOrder(river.storm, "order", function(key, value) { msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) })
|
||||
can.core.ItemOrder(river.storm, "order", function(key, value) { msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name, icon: value.icon||""}) })
|
||||
can.base.isFunc(cb) && cb(msg); return true
|
||||
}})
|
||||
})()
|
||||
|
@ -3,14 +3,14 @@ fieldset.inner>form.option input[name=file] { width:160px; }
|
||||
fieldset.inner>div.output { overflow:hidden; }
|
||||
fieldset.inner>div.output div.content { position:relative; }
|
||||
fieldset.inner>div.output div.content td.text { height:20px; }
|
||||
fieldset.inner>div.output div.content td.text span.comment { color:darkgray; }
|
||||
fieldset.inner>div.output div.content td.text span.keyword { color:darkblue; }
|
||||
fieldset.inner>div.output div.content td.text span.package { color:blue; }
|
||||
fieldset.inner>div.output div.content td.text span.datatype { color:cornflowerblue; }
|
||||
fieldset.inner>div.output div.content td.text span.function { color:darkcyan; }
|
||||
fieldset.inner>div.output div.content td.text span.constant { color:gray; }
|
||||
fieldset.inner>div.output div.content td.text span.string { color:brown; }
|
||||
fieldset.inner>div.output div.content td.text span.object { color:purple; }
|
||||
fieldset.inner>div.output div.content td.text span.comment { color:var(--code-comment); }
|
||||
fieldset.inner>div.output div.content td.text span.keyword { color:var(--code-keyword); }
|
||||
fieldset.inner>div.output div.content td.text span.package { color:var(--code-package); }
|
||||
fieldset.inner>div.output div.content td.text span.datatype { color:var(--code-datatype); }
|
||||
fieldset.inner>div.output div.content td.text span.function { color:var(--code-function); }
|
||||
fieldset.inner>div.output div.content td.text span.constant { color:var(--code-constant); }
|
||||
fieldset.inner>div.output div.content td.text span.string { color:var(--code-string); }
|
||||
fieldset.inner>div.output div.content td.text span.object { color:var(--code-object); }
|
||||
fieldset.inner>div.output>div.project { width:230px; }
|
||||
fieldset.inner>div.output>div.project * { font-family:monospace; font-size:14px; outline:none; }
|
||||
fieldset.inner>div.output>div.project div.action { width:100%; }
|
||||
@ -52,13 +52,6 @@ fieldset.inner.cmd>legend { display:none; }
|
||||
fieldset.inner.cmd>form.option { display:none; }
|
||||
fieldset.inner.cmd>div.action { display:none; }
|
||||
fieldset.inner.cmd>div.status { display:none; }
|
||||
body.dark fieldset.inner>div.output div.content td.text span.comment { color:green; }
|
||||
body.dark fieldset.inner>div.output div.content td.text span.keyword { color:royalblue; }
|
||||
body.dark fieldset.inner>div.output div.content td.text span.datatype { color:lavender; }
|
||||
body.dark fieldset.inner>div.output div.content td.text span.function { color:lightgreen; }
|
||||
body.dark fieldset.inner>div.output div.content td.text span.constant { color:gray; }
|
||||
body.dark fieldset.inner>div.output div.content td.text span.string { color:orange; }
|
||||
body.dark fieldset.inner>div.output div.content td.text span.object { color:silver; }
|
||||
body.dark fieldset.inner>div.output div.content tr.line:hover { background-color:unset; }
|
||||
body.white fieldset.inner.cmd>div.output { background-color:aliceblue; }
|
||||
body.white fieldset.inner.cmd>div.output div.content { background-color:white; }
|
||||
|
@ -5,7 +5,7 @@ const VIEW_CREATE = "tabview.view.create", VIEW_REMOVE = "tabview.view.remove",
|
||||
Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { var paths = can.core.Split(can.Option(nfs.PATH), mdb.FS); can.Option(nfs.PATH, paths[0])
|
||||
switch (can.Mode()) {
|
||||
case "result": msg.result = msg.result||[can._output.innerHTML], can.Mode(chat.SIMPLE)
|
||||
}
|
||||
}
|
||||
can.core.List(paths.concat(can.core.Split(msg.Option(nfs.REPOS))), function(p) { if (can.base.endWith(p, "-story/", "-dict/")) { return }
|
||||
if (p && paths.indexOf(p) == -1 && p[0] != nfs.PS) { paths.push(p) }
|
||||
}), can.onmotion.clear(can), can.onappend.style(can, code.INNER), can.sup.onimport._process = function() {}
|
||||
@ -13,10 +13,11 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { var paths = can.core.Sp
|
||||
can.ui = can.onappend.layout(can, [html.PROJECT, [html.TABS, nfs.PATH, [html.CONTENT, html.PROFILE], html.DISPLAY, html.PLUG]])
|
||||
can.ui._content = can.ui.content, can.ui._profile = can.ui.profile, can.ui._display = can.ui.display, can.onmotion.hidden(can, can.ui.plug)
|
||||
can.onmotion.hidden(can, can.ui.profile), can.onmotion.hidden(can, can.ui.display)
|
||||
can.Conf("style") == "output" && can.onmotion.hidden(can, can.ui.project)
|
||||
can.Conf("style") == "output" && can.page.style(can, can.ui.content, html.HEIGHT, "")
|
||||
switch (can.Mode()) {
|
||||
case chat.SIMPLE: // no break
|
||||
case chat.FLOAT: can.onmotion.hidden(can, can.ui.project); break
|
||||
make
|
||||
case chat.CMD: can.misc.sessionStorage(can, PROJECT_HIDE) == html.HIDE && can.onmotion.hidden(can, can.ui.project)
|
||||
if (can.misc.sessionStorage(can, TABVIEW_HIDE) == html.HIDE) { can.onmotion.hidden(can, can.ui.project), can.onmotion.hidden(can, can.ui.tabs) }
|
||||
can.onappend.style(can, html.OUTPUT)
|
||||
@ -213,7 +214,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { var paths = can.core.Sp
|
||||
can.onimport.tabview(can, item.path, can.base.trimPrefix(item.file, nfs.PWD), parseInt(item.line)); return true
|
||||
}, can.base.isFunc(cb) && cb(sub) }, can.ui.plug.parentNode, can.ui.plug), can.page.isDisplay(can.ui.plug) || can.onmotion.toggle(can, can.ui.plug, true) && can.onimport.layout(can)
|
||||
},
|
||||
layout: function(can) { if (can.isSimpleMode()) { return can.page.style(can, can.ui.content, html.WIDTH, can.ConfWidth()) } if (can.isCmdMode()) { can.ConfHeight(can.page.height()) }
|
||||
layout: function(can) { if (can.isSimpleMode() || can.Conf("style") == "output") { return can.page.style(can, can.ui.content, html.WIDTH, can.ConfWidth()) } if (can.isCmdMode()) { can.ConfHeight(can.page.height()) }
|
||||
var content = can.ui.content; if (content._root) { can.ui.content = content._root } can.ui.size = {profile: can._msg.Option(html.WIDTH), display: can._msg.Option(html.HEIGHT)}
|
||||
can.ui.layout(can.ConfHeight(), can.ConfWidth(), 0, function(height, width) { can.ui.content = content, can.onlayout.layout(can, height, width)
|
||||
var sub = can.ui.profile._plugin; sub && can.page.isDisplay(can.ui.profile) && sub.onimport.size(sub, can.ui.profile.offsetHeight, can.ui.profileWidth, true)
|
||||
|
@ -119,6 +119,7 @@ Volcanos(chat.ONSYNTAX, {
|
||||
"refer": code.KEYWORD, "brief": code.KEYWORD, "spark": code.KEYWORD, "shell": code.KEYWORD, "parse": code.KEYWORD,
|
||||
"order": code.KEYWORD, "table": code.KEYWORD, "chart": code.KEYWORD, "label": code.KEYWORD, "chain": code.KEYWORD, "sequence": code.KEYWORD,
|
||||
"field": code.KEYWORD, "image": code.KEYWORD, "video": code.KEYWORD, "audio": code.KEYWORD,
|
||||
"style": code.KEYWORD,
|
||||
|
||||
"package": code.KEYWORD, "import": code.KEYWORD, "const": code.KEYWORD, "type": code.KEYWORD, "var": code.KEYWORD,
|
||||
"if": code.KEYWORD, "else": code.KEYWORD,
|
||||
@ -248,7 +249,10 @@ Volcanos(chat.ONSYNTAX, {
|
||||
keyword: {
|
||||
"body": code.KEYWORD, "fieldset": code.KEYWORD, "legend": code.KEYWORD, "form": code.KEYWORD, "input": code.KEYWORD, "select": code.KEYWORD, "textarea": code.KEYWORD,
|
||||
"table": code.KEYWORD, "thead": code.KEYWORD, "tbody": code.KEYWORD, "tr": code.KEYWORD, "th": code.KEYWORD, "td": code.KEYWORD,
|
||||
"h1": code.KEYWORD, "h2": code.KEYWORD, "h3": code.KEYWORD, "a": code.KEYWORD,
|
||||
"h1": code.KEYWORD, "h2": code.KEYWORD, "h3": code.KEYWORD,
|
||||
"a": code.KEYWORD,
|
||||
"p": code.KEYWORD,
|
||||
"ul": code.KEYWORD, "li": code.KEYWORD,
|
||||
"label": code.KEYWORD, "span": code.KEYWORD, "img": code.KEYWORD, "svg": code.KEYWORD, "div": code.KEYWORD,
|
||||
"video": code.KEYWORD,
|
||||
"hover": code.DATATYPE, "focus": code.DATATYPE, "not": code.DATATYPE, "type": code.FUNCTION, "name": code.FUNCTION,
|
||||
@ -260,6 +264,7 @@ Volcanos(chat.ONSYNTAX, {
|
||||
"height": code.FUNCTION, "width": code.FUNCTION, "min-width": code.FUNCTION, "max-width": code.FUNCTION, "max-height": code.FUNCTION,
|
||||
"left": code.FUNCTION, "top": code.FUNCTION, "right": code.FUNCTION, "bottom": code.FUNCTION,
|
||||
"border-radius": code.FUNCTION, "outline": code.FUNCTION, "box-shadow": code.FUNCTION,
|
||||
"justify-content": code.FUNCTION,
|
||||
|
||||
"solid": code.CONSTANT, "unset": code.CONSTANT,
|
||||
"block": code.CONSTANT, "none": code.CONSTANT, "hidden": code.CONSTANT, "visible": code.CONSTANT, "auto": code.CONSTANT, "relative": code.CONSTANT, "absolute": code.CONSTANT, "sticky": code.CONSTANT, "fixed": code.CONSTANT,
|
||||
|
@ -1,9 +1,9 @@
|
||||
Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear(can)
|
||||
Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear(can), can.Conf("padding", 10)
|
||||
can.page.Modify(can, target, msg.Result())
|
||||
can.page.Select(can, target, 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.onimport.layout(can) })
|
||||
}), can.onmotion.delay(can, function() { can.onimport.layout(can) }, 300)
|
||||
},
|
||||
navmenu: function(can, meta, target) { var nav = can.sup._navmenu
|
||||
nav = can.onmotion.clear(can, nav||can.page.insertBefore(can, [wiki.NAVMENU], can._output)), can.sup._navmenu = nav
|
||||
@ -69,10 +69,10 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear(
|
||||
}) }
|
||||
},
|
||||
image: function(can, meta, target) {
|
||||
can.page.style(can, target, html.MAX_HEIGHT, can.base.Min(can.ConfHeight()-20, window.innerHeight/2), html.MAX_WIDTH, can.ConfWidth()-20)
|
||||
can.page.style(can, target, html.MAX_HEIGHT, can.base.Min(can.ConfHeight()-2*can.Conf("padding"), window.innerHeight/2), html.MAX_WIDTH, can.ConfWidth()-2*can.Conf("padding"))
|
||||
},
|
||||
video: function(can, meta, target) {
|
||||
can.page.style(can, target, html.MAX_HEIGHT, can.base.Min(can.ConfHeight()-20, window.innerHeight/2), html.MAX_WIDTH, can.ConfWidth()-20)
|
||||
can.page.style(can, target, html.MAX_HEIGHT, can.base.Min(can.ConfHeight()-2*can.Conf("padding"), window.innerHeight/2), html.MAX_WIDTH, can.ConfWidth()-2*can.Conf("padding"))
|
||||
},
|
||||
audio: function(can, meta, target) {},
|
||||
|
||||
|
@ -59,7 +59,8 @@ Volcanos(chat.ONIMPORT, {
|
||||
_close: function(can, msg) { return can.user.close() || history.back() },
|
||||
size: function(can, height, width, auto, mode) { height -= can.onexport.actionHeight(can)+can.onexport.statusHeight(can)
|
||||
auto? can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, "", html.MAX_HEIGHT, height? can.ConfHeight(height): "", html.MAX_WIDTH, can.ConfWidth(width)):
|
||||
can.page.style(can, can._output, html.HEIGHT, can.ConfHeight(height), html.WIDTH, can.ConfWidth(width), html.MAX_HEIGHT, "", html.MAX_WIDTH, "")
|
||||
(can.page.style(can, can._output, html.HEIGHT, can.ConfHeight(height), html.WIDTH, can.ConfWidth(width), html.MAX_HEIGHT, "", html.MAX_WIDTH, ""),
|
||||
can.page.style(can, can._target, html.WIDTH, can.ConfWidth(width)))
|
||||
var sub = can.core.Value(can, chat._OUTPUTS_CURRENT); if (!sub) { return can.Mode(mode), auto } sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth())
|
||||
if (mode) { sub.Mode(can.Mode(mode)), sub.onlayout[mode](sub) } else { sub.onlayout._init(sub) } return auto
|
||||
},
|
||||
|
@ -18,7 +18,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { can.page.requireDraw(ca
|
||||
_color: function(can, tree) { return tree.meta.color || (tree.list == 0? cli.PURPLE: cli.YELLOW) },
|
||||
layout: function(can) { can.page.ClassList.has(can, can._fields, html.FLOAT) || can.page.style(can, can._output, html.MAX_HEIGHT, "")
|
||||
can.svg && can.svg.Val(svg.FONT_SIZE, can.size = parseInt(can.Action(html.SIZE)||24)), can.margin = parseInt(can.Action(html.MARGIN)||10)
|
||||
can.core.CallFunc(can.onaction[can.Action(ice.VIEW)||"横向"], [event, can, can.Action(ice.VIEW)])
|
||||
can._tree && can.core.CallFunc(can.onaction[can.Action(ice.VIEW)||"横向"], [event, can, can.Action(ice.VIEW)])
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONACTION, {list: [[ice.VIEW, "横向", "纵向"], [html.SIZE, 24, 32, 48], [html.MARGIN, 10, 30, 50]],
|
||||
|
@ -145,10 +145,10 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear(
|
||||
}, oncontextmenu: function(event) { if (can.base.isFunc(cbs)) { var menu = cbs(event, ui._target); if (menu) { can.user.carteRight(event, can, menu.meta, menu.list, menu) } } }}
|
||||
}) }], target.nextSibling, target.parentNode)
|
||||
},
|
||||
list: function(can, root, cb, target) { target = target||can._output
|
||||
list: function(can, root, cb, target, cbs) { target = target||can._output
|
||||
can.core.List(root.list, function(item) { var ui = can.page.Append(can, target, [{view: [html.ITEM, html.DIV, item.meta.name], onclick: function(event) {
|
||||
can.base.isFunc(cb) && cb(event, item) || can.onmotion.toggle(can, ui.list), can.onmotion.select(can, target, html.DIV_ITEM, event.target)
|
||||
}}, {view: html.LIST}]); can.onimport.list(can, item, cb, ui.list) })
|
||||
}, _init: function(target) { cbs && cbs(target, item) }}, {view: html.LIST}]); can.onimport.list(can, item, cb, ui.list, cbs) })
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONLAYOUT, {
|
||||
|
8
proto.js
8
proto.js
@ -96,6 +96,7 @@ var web = {CHAT: "chat",
|
||||
CHAT_MACOS_DESKTOP: "web.chat.macos.desktop", CHAT_MACOS_SESSION: "web.chat.macos.session",
|
||||
CHAT_IFRAME: "web.chat.iframe", CHAT_FAVOR: "web.chat.favor",
|
||||
TEAM_PLAN: "web.team.plan",
|
||||
WIKI_PORTAL: "web.wiki.portal",
|
||||
}
|
||||
var aaa = {
|
||||
LOGIN: "login", LOGOUT: "logout", INVITE: "invite", TOKEN: "token",
|
||||
@ -131,6 +132,7 @@ var nfs = {
|
||||
DF: ice.DF, PS: ice.PS, PT: ice.PT,
|
||||
PWD: "./", SRC: "src/", USR: "usr/",
|
||||
PACK: "pack",
|
||||
SRC_DOCUMENT: "src/document/",
|
||||
|
||||
IMAGE_PNG: "image/png",
|
||||
IMAGE_JPEG: "image/jpeg",
|
||||
@ -236,7 +238,7 @@ var html = {PLUGIN_MARGIN: 10, ACTION_HEIGHT: 32, ACTION_MARGIN: 200,
|
||||
BODY: "body", FORM: "form", SELECT: "select", INPUT: "input", TEXT: "text", FILE: "file", BUTTON: "button", TEXTAREA: "textarea",
|
||||
CLICK: "click", CANCEL: "cancel", SUBMIT: "submit", UPLOAD: "upload", USERNAME: "username", PASSWORD: "password",
|
||||
TABLE: "table", THEAD: "thead", TBODY: "tbody", TR: "tr", TH: "th", TD: "td", BR: "br", UL: "ul", LI: "li", BR: "br", HR: "hr",
|
||||
H1: "h1", H2: "h2", H3: "h3", A: "a", LABEL: "label", INNER: "inner", TITLE: "title",
|
||||
H1: "h1", H2: "h2", H3: "h3", A: "a", LABEL: "label", INNER: "inner", TITLE: "title", SPACE: "space",
|
||||
SPAN: "span", CODE: "code", DIV: "div", IMG: "img", VIDEO: "video", WSS: "wss", SVG: "svg", CANVAS: "canvas", IFRAME: "iframe",
|
||||
WEBVIEW: "webview", CHROME: "chrome", MOBILE: "mobile", LANDSCAPE: "landscape",
|
||||
|
||||
@ -292,12 +294,12 @@ var Volcanos = shy({iceberg: "/chat/", volcano: "/frame.js", cache: {}, pack: {}
|
||||
var meta = arguments.callee.meta, list = arguments.callee.list; if (typeof name == lang.OBJECT) {
|
||||
if (name.length > 0) { return Volcanos({panels: [{name: chat.HEADER, style: html.HIDE, state: [mdb.TIME, aaa.USERNICK]}, {name: chat.ACTION, style: html.MAIN, tool: name}, {name: chat.FOOTER, style: html.HIDE}]}) }
|
||||
var Config = name; name = Config.name||ice.CAN, _can_name = ""
|
||||
meta.iceberg = Config.iceberg||meta.iceberg, meta.libs = Config.libs||chat.libs, panels = Config.panels||chat.panel_list, delete(Config.panels)
|
||||
meta.iceberg = Config.iceberg||meta.iceberg, 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||["/panel/"+p.name+nfs._JS, "/panel/"+p.name+nfs._CSS])) }), libs = libs.concat(Config.plugin||chat.plugin_list)
|
||||
cb = can||function(can) { can.onengine._init(can, can.Conf(Config), panels, Config._init||meta._init, can._target) }
|
||||
can = Config, can._follow = name, can._target = Config.target||meta.target, can._height = Config.height||meta._height, can._width = Config.width||meta._width
|
||||
}
|
||||
can = kit.proto(can||{}, kit.proto({_name: name, _load: function(name, cbs) { var cache = meta.cache[name]||[]
|
||||
can = kit.proto(can||{}, kit.proto({_name: name, _path: _can_name, _load: function(name, cbs) { var cache = meta.cache[name]||[]
|
||||
for (list.reverse(); list.length > 0; list) { var sub = list.pop(); sub != can && cache.push(sub), sub._path = sub._path||name } meta.cache[name] = cache
|
||||
cache.forEach(function(sub) { var name = sub._name; if (typeof cbs == lang.FUNCTION && cbs(can, name, sub)) { return }
|
||||
can[name] = can[name]||{}; for (var k in sub) { can[name].hasOwnProperty(k) || sub.hasOwnProperty(k) && (can[name][k] = sub[k]) }
|
||||
|
@ -1,211 +1,167 @@
|
||||
html, body {
|
||||
--body-bg-color:white;
|
||||
--body-fg-color:black;
|
||||
|
||||
--legend-bg-color:lightsteelblue;
|
||||
--input-bg-color:white;
|
||||
--input-fg-color:var(--body-fg-color);
|
||||
--input-radius:5px;
|
||||
--input-border:blue solid 1px;
|
||||
--output-bg-color:var(--input-bg-color);
|
||||
--status-border:transparent solid 1px;
|
||||
|
||||
--plugin-radius:10px;
|
||||
--plugin-bg-color:aliceblue;
|
||||
--plugin-fg-color:var(--body-fg-color);
|
||||
--panel-output-bg-color:var(--body-bg-color);
|
||||
--panel-output-fg-color:#d0d3da;
|
||||
--panel-input-bg-color:#6b7488;
|
||||
--panel-input-fg-color:white;
|
||||
--panel-hover-bg-color:#2b3446;
|
||||
--panel-hover-fg-color:white;
|
||||
--panel-bg-color:var(--panel-output-bg-color);
|
||||
--panel-fg-color:var(--panel-output-fg-color);
|
||||
|
||||
--float-fg-color:var(--plugin-fg-color);
|
||||
--float-bg-color:var(--plugin-bg-color);
|
||||
--carte-bg-color:var(--plugin-bg-color);
|
||||
--hover-bg-color:var(--input-bg-color);
|
||||
--hover-fg-color:var(--input-fg-color);
|
||||
|
||||
--th-fg-color:black;
|
||||
--th-bg-color:var(--plugin-bg-color);
|
||||
--td-hover-bg-color:var(--plugin-bg-color);
|
||||
--tr-hover-bg-color:var(--plugin-bg-color);
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
html, body {
|
||||
--body-bg-color:black;
|
||||
--body-fg-color:silver;
|
||||
|
||||
--legend-bg-color:#212121;
|
||||
--input-bg-color:#232526;
|
||||
--input-fg-color:var(--body-fg-color);
|
||||
--input-radius:5px;
|
||||
--input-border:blue solid 1px;
|
||||
--output-bg-color:var(--input-bg-color);
|
||||
--status-border:gray solid 1px;
|
||||
|
||||
--plugin-radius:var(--input-radius);
|
||||
--plugin-bg-color:var(--body-bg-color);
|
||||
--plugin-fg-color:var(--body-fg-color);
|
||||
--panel-output-bg-color:var(--body-bg-color);
|
||||
--panel-output-fg-color:var(--body-fg-color);
|
||||
--panel-bg-color:var(--panel-output-bg-color);
|
||||
--panel-fg-color:var(--panel-output-fg-color);
|
||||
|
||||
--float-fg-color:var(--plugin-fg-color);
|
||||
--float-bg-color:var(--plugin-bg-color);
|
||||
--carte-bg-color:var(--plugin-bg-color);
|
||||
--hover-bg-color:var(--input-bg-color);
|
||||
--hover-fg-color:white;
|
||||
|
||||
--th-bg-color:var(--plugin-bg-color);
|
||||
--td-hover-bg-color:var(--plugin-bg-color);
|
||||
--tr-hover-bg-color:var(--plugin-bg-color);
|
||||
}
|
||||
}
|
||||
fieldset.contexts {
|
||||
color:white;
|
||||
position:fixed;
|
||||
background:radial-gradient(black, #00000073);
|
||||
top:100px;
|
||||
left:100px;
|
||||
z-index:10;
|
||||
background-color:var(--plugin-bg-color); color:var(--plugin-fg-color); border-radius:var(--plugin-radius);
|
||||
padding:0; border:0; margin:0; position:fixed; top:400px; left:400px; z-index:100;
|
||||
}
|
||||
fieldset.contexts legend {
|
||||
text-align:left;
|
||||
cursor:pointer;
|
||||
fieldset.contexts * { padding:0; border:0; margin:0; }
|
||||
fieldset.contexts legend { font-size:1.2rem; line-height:30px; padding:0 10px; height:32px; float:left; }
|
||||
fieldset.contexts select.hide { display:none; }
|
||||
fieldset.contexts input { background-color:var(--input-bg-color); color:var(--input-fg-color); font-size:1rem; padding:0 20px; height:32px; min-width:80px; outline:none; }
|
||||
fieldset.contexts form.option>div.item { float:left; margin-right:10px; height:32px; }
|
||||
fieldset.contexts div.action>div.item { float:left; margin-right:10px; height:32px; }
|
||||
fieldset.contexts div.status>div.item { float:left; padding:5px; height:31px; }
|
||||
fieldset.contexts div.status>div.item>label { font-size:0.6rem; }
|
||||
fieldset.contexts div.output { background-color:var(--output-bg-color); overflow:auto; clear:both; }
|
||||
fieldset.auto, fieldset.full, fieldset.float, body>div.float { position:fixed; z-index:100; }
|
||||
|
||||
background:radial-gradient(black, #00000073);
|
||||
}
|
||||
fieldset.contexts form.option div.item {
|
||||
float:left; margin-right:3px;
|
||||
min-height:25px; vertical-align:middle;
|
||||
}
|
||||
fieldset.contexts div.output {
|
||||
clear:both;
|
||||
overflow:auto;
|
||||
}
|
||||
fieldset.contexts div.status div.item {
|
||||
float:left; padding:4px;
|
||||
height:18px;
|
||||
}
|
||||
fieldset.contexts div.status div.item>label {
|
||||
font-size:10px;
|
||||
/* color:#504242e0; */
|
||||
}
|
||||
body>div.carte { padding:0; }
|
||||
body>div.carte input[name=filter] { margin:5px; width:calc(100% - 10px); position:sticky; top:5px; }
|
||||
body>div.carte div.item { text-align:center; white-space:pre; padding:5px 10px; }
|
||||
body>div.carte div.item span.icon.next { float:right; }
|
||||
body>div.carte div.item { background-color:var(--carte-bg-color); }
|
||||
body>div.carte div.item:hover { background-color:var(--hover-bg-color); }
|
||||
|
||||
fieldset.contexts select {
|
||||
height:25px; font-size:14px;
|
||||
box-shadow:4px 4px 10px 1px #626bd0;
|
||||
background-color:black; color:cyan;
|
||||
padding:0 10px;
|
||||
cursor:pointer;
|
||||
}
|
||||
fieldset.contexts option {
|
||||
font-family:monospace;
|
||||
}
|
||||
fieldset.contexts textarea {
|
||||
width:400px; height:60px;
|
||||
background-color:cyan;
|
||||
}
|
||||
fieldset.contexts input[type=button] {
|
||||
background-color:black; color:cyan;
|
||||
letter-spacing:4px;
|
||||
padding-left:10px;
|
||||
cursor:pointer;
|
||||
font-family:monospace;
|
||||
}
|
||||
fieldset.contexts input[type=button]:hover {
|
||||
background-color:gray; color:cyan;
|
||||
}
|
||||
fieldset.contexts input[type=text] {
|
||||
width:82px; height:21px; font-size:16px;
|
||||
box-shadow:4px 4px 10px 1px #626bd0;
|
||||
background-color:cyan; color:black;
|
||||
padding:0 4px;
|
||||
}
|
||||
fieldset.contexts input[type=text]:hover {
|
||||
background-color:white;
|
||||
}
|
||||
fieldset.contexts table.content a {
|
||||
color:white;
|
||||
}
|
||||
fieldset.contexts table.content {
|
||||
color:white;
|
||||
}
|
||||
fieldset.contexts div.code {
|
||||
background-color:#343a3445; color:white;
|
||||
font-size:14px; font-family:monospace;
|
||||
box-shadow:4px 4px 20px 4px #626bd0;
|
||||
padding:10px; border:solid 3px green;
|
||||
text-align:left; white-space:pre;
|
||||
overflow:auto;
|
||||
clear:both;
|
||||
}
|
||||
div.input.contexts input {
|
||||
color:black;
|
||||
}
|
||||
/* icon */
|
||||
fieldset.contexts form.option>div.icon { font-size:26px; line-height:28px; padding:0 5px; height:32px; margin:0; }
|
||||
fieldset.contexts form.option>div.item.icons>span.icon { font-size:26px; line-height:28px; padding:0 5px; height:32px; }
|
||||
fieldset.contexts form.option>div.item.icons>span.icon.create { line-height:30px; }
|
||||
fieldset.contexts div.action>div.item.icons>span.icon { font-size:26px; line-height:28px; padding:0 5px; height:32px; }
|
||||
fieldset.contexts div.action>div.item.icons>span.icon.create { line-height:30px; }
|
||||
fieldset.contexts form.option>div.icon:first-child { margin-left:-5px; }
|
||||
fieldset.contexts form.option>div.icon.refresh { line-height:26px; }
|
||||
fieldset.contexts form.option>div.icon.goback { line-height:26px; }
|
||||
fieldset.contexts form.option>div.icon.delete { font-size:18px; margin-left:5px; margin-right:0px; }
|
||||
fieldset.contexts form.option>div.icon.next { font-size:18px; }
|
||||
fieldset.contexts form.option>div.icon.prev { font-size:18px; }
|
||||
fieldset.contexts form.option>div.item.text>span.icon { margin-left:-20px; margin-right:3px; }
|
||||
fieldset.contexts form.option>div.item.select>span.icon { margin-left:-15px; margin-right:3px; visibility:hidden; }
|
||||
fieldset.contexts form.option>div.item.select:hover>span.icon { visibility:visible; }
|
||||
fieldset.contexts div.item.text>span.icon.delete { font-size:20px; visibility:hidden; }
|
||||
fieldset.contexts div.item.text:hover>span.icon.delete { visibility:visible; }
|
||||
fieldset.contexts form.option>div.button.icons { display:none; }
|
||||
fieldset.contexts div.action>div.button.icons { display:none; }
|
||||
|
||||
table.content {
|
||||
border:0; white-space:pre;
|
||||
font-size:14px; font-family:monospace;
|
||||
text-align:left;
|
||||
overflow:auto;
|
||||
}
|
||||
table.content tr {
|
||||
background-color:#04272f45;
|
||||
}
|
||||
table.content tr.select {
|
||||
background-color:green;
|
||||
}
|
||||
table.content tr:hover {
|
||||
background-color:green;
|
||||
}
|
||||
table.content th {
|
||||
background-color:#0fbd45;
|
||||
padding:2px 6px;
|
||||
cursor:pointer;
|
||||
}
|
||||
table.content th:hover {
|
||||
background-color:red;
|
||||
}
|
||||
table.content td {
|
||||
padding:2px 6px;
|
||||
overflow:auto;
|
||||
}
|
||||
table.content td.done {
|
||||
background-color:green;
|
||||
}
|
||||
table.content td.select {
|
||||
background-color:red;
|
||||
}
|
||||
table.content td:hover {
|
||||
background-color:red;
|
||||
}
|
||||
/* https://redis.io/ */
|
||||
html, body.antialiased, main { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
main>div>nav>div.absolute { background:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
section.prose *:not(a):not(pre):not(code) { color:var(--body-fg-color); border-left-color:gray; }
|
||||
main>div>nav span { background:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
main>section>div.w-52.z-40.hidden.overflow-auto.fixed { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
main>section>div.w-52.z-40.hidden.overflow-auto.fixed nav { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
@media (prefers-color-scheme: dark) { section.prose code { color:var(--body-fg-color); font-style:italic; } }
|
||||
|
||||
body>div.toast {
|
||||
background:#0e3369b3; color:yellow;
|
||||
position:fixed;
|
||||
padding:5px; overflow:auto;
|
||||
z-index:10;
|
||||
}
|
||||
body>div.toast a {
|
||||
color:yellow;
|
||||
}
|
||||
body>div.toast div.title {
|
||||
float:left; word-break:break-all;
|
||||
color:#cae850; font-size:14px;
|
||||
cursor:copy;
|
||||
}
|
||||
body>div.toast div.duration {
|
||||
color:gray; font-size:14px;
|
||||
float:right;
|
||||
cursor:pointer;
|
||||
}
|
||||
body>div.toast div.content {
|
||||
text-align:center;
|
||||
white-space:pre;
|
||||
clear:both;
|
||||
}
|
||||
body>div.toast div.action div.item {
|
||||
float:left;
|
||||
}
|
||||
body>div.toast div.progress {
|
||||
height:10px; border:solid 2px green;
|
||||
margin-left:-2px;
|
||||
clear:both;
|
||||
}
|
||||
body>div.toast div.progress div.current {
|
||||
height:10px; background:red;
|
||||
}
|
||||
/* https://blog.csdn.net/ */
|
||||
body { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div .toolbar-container { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div.main_father { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div aside.blog_container_aside * { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div aside div.aside-box h3.aside-title { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div aside div.aside-box { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div aside div.aside-box div.aside-content { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
.nodata .recommend-right_aside .kind_person .aside-content ul { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body main div.blog-content-box .article-header-box { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body .groupfile .pos-box .scroll-box .toc-box >ol li.active { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div main * { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div main div.blog-content-box { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div .programmer1Box { display:none; }
|
||||
|
||||
body>div.carte {
|
||||
position:fixed;
|
||||
background:#295b61;
|
||||
color:white;
|
||||
padding:4px;
|
||||
min-width:80px;
|
||||
z-index:10;
|
||||
}
|
||||
body>div.carte div.item {
|
||||
padding:3px 12px;
|
||||
}
|
||||
body>div.carte div.item:hover {
|
||||
background:red;
|
||||
}
|
||||
body>div.input {
|
||||
position:fixed;
|
||||
background-color:#0d4142a6;
|
||||
z-index:10;
|
||||
}
|
||||
body>div.input input[type=text] {
|
||||
width:171px;
|
||||
}
|
||||
body>div.input input[name=username] {
|
||||
width:171px;
|
||||
}
|
||||
body>div.input input[name=password] {
|
||||
width:171px;
|
||||
}
|
||||
body>div.input textarea {
|
||||
box-shadow:4px 4px 10px 1px #626bd0;
|
||||
border:2px inset #14a58e;
|
||||
width:171px; height:60px;
|
||||
background-color:cyan;
|
||||
padding:4px;
|
||||
}
|
||||
body>div.input div.item {
|
||||
float:left;
|
||||
}
|
||||
body>div.input.login {
|
||||
padding:10px;
|
||||
}
|
||||
body>div.input.login input {
|
||||
font-size:18px;
|
||||
}
|
||||
/* https://zhuanlan.zhihu.com/ */
|
||||
body div .Post-content { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div .ColumnPageHeader { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div .ContentItem-actions { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body #blogColumnPayAdvert .column-group-item, body #blogHuaweiyunAdvert .column-group-item { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div .markdown_views blockquote { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body main div.blog-content-box .article-header-box .article-header div.article-title-box .title-article { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body main div .markdown_views * { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body .more-toolbox-new .left-toolbox { display:none; }
|
||||
body .csdn-side-toolbar { display:none; }
|
||||
body #footerRightAds { display:none; }
|
||||
body div.box-shadow.mb8 { display:none; }
|
||||
|
||||
/* https://cn.bing.com/ */
|
||||
body header#b_header { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div #b_results .b_algo.b_rc_gb_template.b_algoBorder { background:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div .b_rc_gb_text_cell_wrapper>div:last-child { background:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div #b_results>.b_algo { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div #b_results .b_ans.b_nwsAns { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div #b_results .b_algoBigWiki .b_widgetContainer, body div #b_results .b_rc_gb_template .b_widgetContainer { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div .b_rc_gb_w_content { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body .b_searchboxForm { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body #b_header .b_searchbox { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body #sw_as .sa_drw .sa_sg { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body #b_results .b_rc_gb_sub .b_paractl { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
|
||||
/* https://juejin.cn/ */
|
||||
body div#juejin div.view-container { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div#juejin div.main-header-box header { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div#juejin article { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div#juejin .article-suspended-panel { display:none; }
|
||||
body div#juejin .markdown-body blockquote { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
body div#juejin .sidebar .sidebar-block { background-color:var(--body-bg-color); color:var(--body-fg-color); }
|
||||
|
||||
div.input input[type=button] {
|
||||
background-color:black; color:cyan;
|
||||
letter-spacing:4px;
|
||||
padding-left:10px;
|
||||
cursor:pointer;
|
||||
font-family:monospace;
|
||||
}
|
||||
div.input input[type=button]:hover {
|
||||
background-color:gray; color:cyan;
|
||||
}
|
||||
|
@ -37,7 +37,10 @@ setTimeout(function() { Volcanos({
|
||||
msg.Push(mdb.TYPE, html.IFRAME)
|
||||
msg.Push(mdb.NAME, "")
|
||||
msg.Push(mdb.LINK, target.src)
|
||||
can.spide(can, msg, target.contentWindow.document.body)
|
||||
try {
|
||||
can.spide(can, msg, target.contentWindow.document.body)
|
||||
} catch(e) {
|
||||
}
|
||||
})
|
||||
can.page.Select(can, target, html.A, function(target) {
|
||||
msg.Push(mdb.TYPE, html.A)
|
||||
@ -46,17 +49,25 @@ setTimeout(function() { Volcanos({
|
||||
})
|
||||
},
|
||||
style: function(can, msg, arg) {
|
||||
can.core.List(arg[0].split(mdb.FS), function(item) {
|
||||
can.page.Select(can, document.body, item, function(target) {
|
||||
can.page.Modify(can, target, can.base.Obj(arg[1]))
|
||||
})
|
||||
})
|
||||
if (arg[0] == "style") {
|
||||
can.page.AppendStyle(can, arg[1])
|
||||
} else {
|
||||
can.core.List(arg[0].split(mdb.FS), function(item) {
|
||||
can.page.Select(can, document.body, item, function(target) {
|
||||
can.page.Modify(can, target, can.base.Obj(arg[1]))
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
field: function(can, msg, arg) {
|
||||
can.onappend.plugin(can, {type: chat.CONTEXTS, index: arg[0], args: can.base.Obj(arg[1])}, function(sub, meta) {
|
||||
var height = can.base.Max(window.innerHeight-sub._target.offsetTop-2*html.ACTION_HEIGHT, 200)
|
||||
var width = can.base.Max(window.innerWidth-sub._target.offsetLeft, 800)
|
||||
sub.Conf({height: height, width: width}), sub._legend.innerText = meta.help
|
||||
sub.run = function(event, cmds, cb) { msg.RunAction(event, can, cmds) || can.runActionCommand(event, meta.index, cmds, function(msg) {
|
||||
can.onmotion.toggle(can, sub._option, true), can.onmotion.toggle(can, sub._action, true), can.onmotion.toggle(can, sub._output, true), can.onmotion.toggle(can, sub._status, true)
|
||||
can.page.style(can, sub._output, html.MAX_HEIGHT, window.innerHeight-sub._target.offsetTop-2*html.ACTION_HEIGHT, html.MAX_WIDTH, window.innerWidth-sub._target.offsetLeft)
|
||||
can.page.style(can, sub._output, html.MAX_HEIGHT, height, html.MAX_WIDTH, width)
|
||||
can.page.style(can, sub._target, html.LEFT, window.innerWidth-width, html.TOP, window.innerHeight-height-2*html.ACTION_HEIGHT)
|
||||
can.base.isFunc(cb) && cb(msg)
|
||||
}) }
|
||||
sub._target.onclick = function() {
|
||||
@ -92,6 +103,15 @@ setTimeout(function() { Volcanos({
|
||||
can.runAction({}, ctx.COMMAND, [], function(msg) { msg.result && msg.result[0] && can.field(can, msg, msg.result) })
|
||||
},
|
||||
}, function(can) {
|
||||
can.page.theme(function(theme) {
|
||||
if (theme == html.LIGHT) {
|
||||
can.page.ClassList.add(can, document.body, html.LIGHT)
|
||||
can.page.ClassList.del(can, document.body, html.DARK)
|
||||
} else {
|
||||
can.page.ClassList.add(can, document.body, html.DARK)
|
||||
can.page.ClassList.del(can, document.body, html.LIGHT)
|
||||
}
|
||||
})
|
||||
can.run = function(event, cmds, cb) { if (cmds[0] == "_search") { return }
|
||||
var msg = can.request(event, {domain: location.host}); msg.detail = ["page"].concat(cmds)
|
||||
chrome.runtime.sendMessage(msg, function(res) { can.base.isFunc(cb) && cb(msg.Copy(res)) })
|
||||
|
@ -2,7 +2,8 @@
|
||||
<html>
|
||||
<head><meta charset="utf-8"></head>
|
||||
<body>
|
||||
<script src="/page/can.js"></script>
|
||||
<script src="/proto.js"></script>
|
||||
<script src="/page/cache.js"></script>
|
||||
<script src="/publish/chrome/daemon.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -46,7 +46,7 @@ Volcanos({
|
||||
}})
|
||||
},
|
||||
}, function(can) {
|
||||
can.run = function(event, cmds, cb) { can.misc.Run(event, can, {names: "http://localhost:9020/code/chrome/"+cmds[0]}, cmds.slice(1), cb) }
|
||||
can.run = function(event, cmds, cb) { can.misc.Run(event, can, {names: "http://localhost:9020/code/chrome/"+cmds[0]+"/"}, cmds.slice(1), cb) }
|
||||
can._motion(can), can._daemon(can)
|
||||
})
|
||||
|
||||
|
@ -1,9 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="/page/can.css">
|
||||
<link rel="stylesheet" href="/index.css">
|
||||
<link rel="stylesheet" href="/page/cache.css">
|
||||
</head>
|
||||
<body style="width:800px; height:600px; overflow:auto">
|
||||
<script src="/page/can.js"></script>
|
||||
<script src="/proto.js"></script>
|
||||
<script src="/page/cache.js"></script>
|
||||
<script src="/publish/chrome/popup.js"></script>
|
||||
</body>
|
||||
|
@ -1,15 +1,7 @@
|
||||
Volcanos({name: "popup", iceberg: "http://localhost:9020/chat/", river: {
|
||||
product: {name: "产品群", storm: {
|
||||
office: {name: "办公 office", list: [
|
||||
{name: "feel", help: "影音媒体", index: "web.wiki.feel"},
|
||||
{name: "draw", help: "思维导图", index: "web.wiki.draw"},
|
||||
{name: "data", help: "数据表格", index: "web.wiki.data"},
|
||||
{name: "plan", help: "计划任务", index: "web.team.plan"},
|
||||
{name: "think", help: "智库", index: "web.wiki.word", args: ["usr/learning/"]},
|
||||
{name: "index", help: "索引", index: "web.wiki.word", args: ["usr/learning/index.shy"]},
|
||||
{name: "context", help: "编程", index: "web.wiki.word", args: ["src/main.shy"]},
|
||||
]},
|
||||
chrome: {name: "爬虫 chrome", list: [
|
||||
product: {name: "产品群", icon: "bi bi-bar-chart-line-fill", storm: {
|
||||
office: {name: "办公 office", icon: "bi bi-bar-chart-line-fill", index: ["web.chat.macos.desktop", "web.wiki.feel", "web.wiki.draw", "web.wiki.data"]},
|
||||
chrome: {name: "爬虫 chrome", icon: "bi-browser-chrome", list: [
|
||||
{name: "feel", help: "网页爬虫", index: "web.wiki.feel", args: ["spide/"], feature: {
|
||||
display: "/plugin/local/wiki/feel.js",
|
||||
height: 200, limit: 3,
|
||||
@ -18,15 +10,9 @@ Volcanos({name: "popup", iceberg: "http://localhost:9020/chat/", river: {
|
||||
{name: "spided", help: "网页爬虫", index: "web.code.chrome.spide", args: location && location.protocol && location.protocol=="chrome-extension:"? ["1", "", "spide"]: ["1"]},
|
||||
]},
|
||||
}},
|
||||
project: {name: "研发群", storm: {
|
||||
studio: {name: "研发 studio", list: [
|
||||
{name: "vimer", help: "编辑器", index: "web.code.vimer", args: ["src/,usr/volcanos/,usr/icebergs/,usr/toolkits/", "main.go"]},
|
||||
{name: "repos", help: "代码库", index: "web.code.git.status"},
|
||||
{name: "favor", help: "收藏夹", index: "web.chat.favor"},
|
||||
{name: "plan", help: "任务表", index: "web.team.plan"},
|
||||
{name: "ctx", help: "上下文", index: "web.wiki.word"},
|
||||
]},
|
||||
chrome: {name: "网页 chrome", index: [
|
||||
project: {name: "研发群", icon: "bi bi-git", storm: {
|
||||
studio: {name: "研发 studio", icon: "bi bi-git", index: ["web.code.vimer", "web.code.git.status", "web.chat.favor", "web.team.plan", "web.wiki.word"]},
|
||||
chrome: {name: "网页 chrome", icon: "bi-browser-chrome", index: [
|
||||
"web.code.chrome.chrome",
|
||||
"web.code.chrome.daemon",
|
||||
"web.code.chrome.spide",
|
||||
@ -35,48 +21,13 @@ Volcanos({name: "popup", iceberg: "http://localhost:9020/chat/", river: {
|
||||
"web.code.chrome.field",
|
||||
]},
|
||||
}},
|
||||
profile: {name: "测试群", storm: {
|
||||
release: {name: "发布 release", index: [
|
||||
"web.code.webpack",
|
||||
"web.code.compile",
|
||||
"web.code.publish",
|
||||
"web.code.docker.client",
|
||||
"web.space",
|
||||
"web.dream",
|
||||
"web.code.git.server",
|
||||
"web.code.git.status",
|
||||
]},
|
||||
toolkit: {name: "工具 toolkit", index: [
|
||||
"web.code.favor",
|
||||
"web.code.xterm",
|
||||
"web.code.inner",
|
||||
"web.code.vimer",
|
||||
"web.code.bench",
|
||||
"web.code.pprof",
|
||||
"web.code.oauth",
|
||||
]},
|
||||
language: {name: "语言 language", index: [
|
||||
"web.code.c",
|
||||
"web.code.sh",
|
||||
"web.code.py",
|
||||
"web.code.shy",
|
||||
"web.code.js",
|
||||
"web.code.go",
|
||||
]},
|
||||
profile: {name: "测试群", icon: "bi bi-list-columns", type: aaa.TECH, storm: {
|
||||
release: {name: "发布 release", icon: "bi bi-list-check", index: ["web.code.compile", "web.code.publish", "web.code.pprof", "web.code.bench", "web.dream", "web.space", "web.code.git.service", "web.code.git.status"]},
|
||||
}},
|
||||
operate: {name: "运维群", storm: {
|
||||
aaa: {name: "权限 aaa", index: [
|
||||
"offer", "email", "user", "totp", "sess", "role",
|
||||
]},
|
||||
web: {name: "应用 web", index: [
|
||||
"broad", "serve", "space", "dream", "share", "cache", "spide",
|
||||
]},
|
||||
cli: {name: "系统 cli", index: [
|
||||
"qrcode", "daemon", "system", "runtime", "mirrors", "forever", "host", "port",
|
||||
]},
|
||||
nfs: {name: "文件 nfs", index: [
|
||||
"cat", "dir", "pack", "tail", "trash",
|
||||
]},
|
||||
operate: {name: "运维群", icon: "bi bi-gear", type: aaa.TECH, storm: {
|
||||
web: {name: "应用 web", icon: "bi bi-browser-chrome", index: ["broad", "serve", "space", "dream", "share"]},
|
||||
aaa: {name: "权限 aaa", icon: "bi bi-people-fill", index: ["offer", "email", "user", "totp", "sess", "role"]},
|
||||
cli: {name: "系统 cli", icon: "bi bi-windows", index: ["qrcode", "daemon", "runtime", "cli.procstat", "cli.procinfo", "mirrors", "signal", "timer", "routine", "log.debug"]},
|
||||
nfs: {name: "文件 nfs", icon: "bi bi-server", index: ["dir", "cat", "tar", "pack", "tail", "trash", "server", "host", "port"]},
|
||||
}},
|
||||
}})
|
||||
|
||||
}}) // https://icons.getbootstrap.com/
|
||||
|
Loading…
x
Reference in New Issue
Block a user