mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 16:58:06 +08:00
Compare commits
80 Commits
Author | SHA1 | Date | |
---|---|---|---|
b24bdc33f2 | |||
4fba3f0a65 | |||
58c1f57814 | |||
fb526f0c8e | |||
7426ac64cb | |||
27b6505a44 | |||
2da6711ce3 | |||
d95a8e99b4 | |||
6ce0e580de | |||
87841a9e2f | |||
82b234b002 | |||
4a81d5e87b | |||
68f8c3b873 | |||
![]() |
71fd4be1c9 | ||
![]() |
ebeecd3423 | ||
![]() |
a34814261a | ||
![]() |
647dbf6d91 | ||
6b0fc20430 | |||
c76ef839aa | |||
ee60a8b9bc | |||
39fcf84f40 | |||
7a44753dca | |||
31f888755f | |||
a63f1d4dab | |||
b70e92c19d | |||
![]() |
d442e0c168 | ||
![]() |
044d57c509 | ||
![]() |
7aaf056db8 | ||
![]() |
37b896bed1 | ||
![]() |
34686ad781 | ||
![]() |
808124b782 | ||
1aa5603a82 | |||
39499d7f4b | |||
![]() |
0fb76d1569 | ||
4d59ba0b77 | |||
d409358c30 | |||
47d96e5e0a | |||
9fa440245a | |||
98916131e3 | |||
9f6650df0d | |||
![]() |
943c1ec129 | ||
![]() |
33bb1ef07b | ||
81f8598691 | |||
a6a2b12072 | |||
af2222ca55 | |||
32abbf3a70 | |||
6263444d07 | |||
4d9d3a6bda | |||
6313d57ff6 | |||
e354cf4d2f | |||
69c73c5593 | |||
3a3def6e96 | |||
e70b727c94 | |||
cb5d5d992e | |||
b06d344082 | |||
f893b961a6 | |||
![]() |
29d9275a65 | ||
1020f41d5d | |||
33a7151166 | |||
![]() |
0f61c3acbd | ||
9d89082b3e | |||
![]() |
d87ec7d9c4 | ||
![]() |
d5e5e2747f | ||
![]() |
1ca51e3895 | ||
![]() |
ec5d230bd9 | ||
![]() |
e7c8114430 | ||
46d4aaf0f4 | |||
![]() |
c9d4795809 | ||
![]() |
8577dd764d | ||
![]() |
1ead9f4b25 | ||
![]() |
b4dbf11528 | ||
![]() |
fb9687dd55 | ||
![]() |
daba956955 | ||
![]() |
78af0b3d1c | ||
![]() |
d7c0a536ea | ||
![]() |
b11fba0426 | ||
b8eefca8f5 | |||
![]() |
284c73cff2 | ||
![]() |
a158908876 | ||
![]() |
4f80806c45 |
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 shylinux
|
||||
Copyright (c) 2017-2025 shylinux
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
18
const.js
18
const.js
@ -106,6 +106,7 @@ var web = {
|
||||
CANCEL: "cancel", SUBMIT: "submit", CONFIRM: "confirm", REFRESH: "refresh",
|
||||
UPLOAD: "upload", DOWNLOAD: "download", PREVIEW: "preview", TOIMAGE: "toimage",
|
||||
|
||||
CLIENT_NAME: "client.name",
|
||||
SHARE_CACHE: "/share/cache/", SHARE_LOCAL: "/share/local/", BASIC_LOGIN: "/basic/login",
|
||||
CHAT_SSO: "/chat/sso/", CHAT_POD: "/chat/pod/", CHAT_CMD: "/chat/cmd/",
|
||||
|
||||
@ -113,8 +114,10 @@ var web = {
|
||||
PORTAL: "portal", DESKTOP: "desktop",
|
||||
STUDIO: "studio", SERVICE: "service",
|
||||
MESSAGE: "message",
|
||||
WORD: "word",
|
||||
STATUS: "status",
|
||||
VIMER: "vimer",
|
||||
WORD: "word",
|
||||
PLAN: "plan",
|
||||
|
||||
CODE_GIT_SEARCH: "web.code.git.search",
|
||||
CODE_GIT_STATUS: "web.code.git.status",
|
||||
@ -176,6 +179,7 @@ var tcp = {
|
||||
SERVICE: "service", HOSTNAME: "hostname",
|
||||
WIFI: "wifi", SSID: "ssid",
|
||||
LOCALHOST: "localhost",
|
||||
DIAL: "dial",
|
||||
DIRECT: "direct", SEND: "send", RECV: "recv",
|
||||
}
|
||||
var nfs = {
|
||||
@ -242,6 +246,7 @@ var cli = {
|
||||
QRCODE: "qrcode", COLOR: "color", BLACK: "black", WHITE: "white", BLUE: "blue", RED: "red", GRAY: "gray", CYAN: "cyan", GREEN: "green", PURPLE: "purple", YELLOW: "yellow",
|
||||
MAGENTA: "magenta", SILVER: "silver", ALICEBLUE: "aliceblue", TRANSPARENT: "transparent",
|
||||
LINUX: "linux", DARWIN: "darwin", WINDOWS: "windows",
|
||||
XTERM: "xterm",
|
||||
SH: "sh",
|
||||
}
|
||||
var log = {
|
||||
@ -252,7 +257,7 @@ var code = {
|
||||
FAVOR: "favor", XTERM: "xterm", INNER: "inner", VIMER: "vimer",
|
||||
WEBPACK: "webpack", BINPACK: "binpack", AUTOGEN: "autogen", COMPILE: "compile", PUBLISH: "publish", UPGRADE: "upgrade",
|
||||
TEMPLATE: "template", COMPLETE: "complete", NAVIGATE: "navigate", CURRENT: "current",
|
||||
PULL: "pull", PUSH: "push",
|
||||
STATUS: "status", PULL: "pull", PUSH: "push",
|
||||
INSTALL: "install",
|
||||
COMMENT: "comment", KEYWORD: "keyword", DATATYPE: "datatype", PACKAGE: "package",
|
||||
FUNCTION: "function", CONSTANT: "constant", STRING: "string", NUMBER: "number", BOOLEAN: "boolean",
|
||||
@ -277,10 +282,11 @@ var chat = {
|
||||
SHARE: "share", RIVER: "river", STORM: "storm", FIELD: "field", TOOL: "tool",
|
||||
STATE: "state", MENUS: "menus", SSO: "sso", LOCATION: "location", IFRAME: "iframe", DESKTOP: "desktop",
|
||||
OUTPUT: "output", SIMPLE: "simple", FLOAT: "float", FULL: "full", CMD: "cmd",
|
||||
MESSAGE: "message",
|
||||
MESSAGE: "message", REQUEST: "request", RESPONSE: "response",
|
||||
MATRIX: "matrix",
|
||||
TUTOR: "tutor",
|
||||
FLOWS: "flows",
|
||||
ADMIN: "admin",
|
||||
|
||||
HEADER: "Header", ACTION: "Action", FOOTER: "Footer",
|
||||
libs: ["base.js", "core.js", "date.js", "misc.js", "page.js", "user.js"].map(function(p) { return "/lib/"+p }),
|
||||
@ -359,6 +365,7 @@ var html = {
|
||||
FLOAT_HEIGHT: 480, FLOAT_WIDTH: 1200,
|
||||
PLUGIN_PADDING: 0, PLUGIN_MARGIN: 0,
|
||||
|
||||
IFRAME_HEIGHT: 420,
|
||||
HEADER_HEIGHT: 48, ACTION_HEIGHT: 32, STATUS_HEIGHT: 32,
|
||||
QRCODE_HEIGHT: 363, QRCODE_WIDTH: 360,
|
||||
CARD_HEIGHT: 160, CARD_WIDTH: 280,
|
||||
@ -435,6 +442,7 @@ var html = {
|
||||
|
||||
IMAGE_PNG: "image/png", VIDEO_WEBM: "video/webm",
|
||||
BACKGROUND_JPG: "usr/icons/background.jpg",
|
||||
BACKGROUND_PNG: "usr/icons/background.png",
|
||||
AVATAR_JPG: "usr/icons/avatar.jpg",
|
||||
}
|
||||
var icon = {
|
||||
@ -509,6 +517,7 @@ var icon = {
|
||||
data: "bi bi-database",
|
||||
branch: "bi bi-diagram-3", commit: "bi bi-hash",
|
||||
message: "bi bi-wechat",
|
||||
address: "bi bi-pin-map",
|
||||
|
||||
plugin: "bi bi-window-stack",
|
||||
preview: "bi bi-window-stack", show: "bi bi-window-stack",
|
||||
@ -521,6 +530,7 @@ var icon = {
|
||||
host: "bi bi-pc-display",
|
||||
port: "bi bi-hash",
|
||||
arch: "bi bi-cpu", os: "bi bi-ubuntu",
|
||||
cpu: "bi bi-cpu",
|
||||
role: "bi bi-person-square",
|
||||
title: "bi bi-textarea-t",
|
||||
type: "bi bi-card-list",
|
||||
@ -556,3 +566,5 @@ try { module.exports = {
|
||||
code: code, wiki: wiki, chat: chat, team: team, mall: mall,
|
||||
http: http, html: html, icon: icon, svg: svg
|
||||
} } catch (e) {}
|
||||
|
||||
var UID = "uid"
|
||||
|
133
frame.js
133
frame.js
@ -35,7 +35,7 @@ Volcanos(chat.ONENGINE, {
|
||||
names = can.base.MergeURL(names, ice.MSG_INDEX, sub.ConfIndex()), can.page.exportValue(sub, msg)
|
||||
can.onengine.signal(panel, chat.ONREMOTE, can.request({}, {_follow: panel._follow, _msg: msg, _cmds: cmds, names: names}))
|
||||
can.misc.Run(event, can, {names: names}, cmds, function(msg) {
|
||||
toast && can.user.toastSuccess(msg._can, _toast), toast && toast.close && toast.close(), toast = true
|
||||
msg.IsErr() || toast && can.user.toastSuccess(msg._can, _toast), toast && toast.close && toast.close(), toast = true
|
||||
// delete(sub._toast), delete(sub.__toast)
|
||||
can.onmotion.delay(can, function() { can.page.ClassList.del(can, sub._target, "_process") }, 300)
|
||||
can.base.isFunc(cb) && cb(msg), Volcanos.meta.pack[can.core.Keys(panel._name, cmds.join(mdb.FS))] = msg
|
||||
@ -97,6 +97,9 @@ Volcanos(chat.ONDAEMON, {
|
||||
can.base.isFunc(sub.Update) && sub.Update()
|
||||
}
|
||||
},
|
||||
cookie: function(can, msg, arg) {
|
||||
can.misc.Cookie(can, arg[1], arg[0])
|
||||
},
|
||||
grant: function(can, msg, sub, arg) {
|
||||
var toast = can.user.toast(can, {duration: arg[1]||10000, content: "grant "+arg[0], action: shy({
|
||||
confirm: function(event) { toast.close(), can.run(can.request(event, {name: arg[0]}), [ctx.ACTION, ctx.RUN, web.SPACE, aaa.LOGIN]) },
|
||||
@ -153,7 +156,7 @@ Volcanos(chat.ONAPPEND, {
|
||||
var status = can.page.SelectOne(can, field, html.DIV_STATUS)
|
||||
can.isCmdMode() && meta.index && meta.index.indexOf("can.") != 0 && can.page.style(can, field, "visibility", "hidden")
|
||||
can.isCmdMode() && meta.index && meta.index.indexOf("can.") != 0 && can.page.style(can, output, "visibility", "hidden")
|
||||
can.isCmdMode() && (can.base.isIn(meta.index, web.WIKI_PORTAL)) && can.onappend.style(can, html.OUTPUT, field)
|
||||
can.isCmdMode() && meta.style != "float" && (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: [], db: {hash: [""]}, ui: {},
|
||||
Status: function(key, value) { if (can.base.isObject(key)) { return can.core.Item(key, sub.Status), key } try {
|
||||
@ -163,13 +166,8 @@ Volcanos(chat.ONAPPEND, {
|
||||
return can.base.isUndefined(value)? (value = target.innerText): (target.innerHTML = value.trim? value.trim(): value+"")
|
||||
}); return value
|
||||
} catch (e) {} },
|
||||
Action: function(key, value) {
|
||||
// value && (value = can.user.trans(sub, value, null, html.INPUT))
|
||||
return can.page.SelectArgs(can, action, key, value)[0]
|
||||
},
|
||||
Option: function(key, value) {
|
||||
// value && (value = can.user.trans(sub, value, null, html.INPUT));
|
||||
return can.page.SelectArgs(can, option, key, value)[0] },
|
||||
Action: function(key, value) { return can.page.SelectArgs(can, action, key, value)[0] },
|
||||
Option: function(key, value) { return can.page.SelectArgs(can, option, key, value)[0] },
|
||||
Update: function(event, cmds, cb, silent) { event = event||{}, sub.request(event)._caller(), event.metaKey && sub.request(event, {metaKey: ice.TRUE})
|
||||
var msg = sub.request(event), list = can.core.Value(sub, "sub.db._checkbox"); can.core.Item(list, function(key, value) { msg.Option(key, value) })
|
||||
sub.request(event, sub.Option())
|
||||
@ -185,7 +183,10 @@ Volcanos(chat.ONAPPEND, {
|
||||
},
|
||||
Clone: function() { meta.args = can.page.SelectArgs(can), can.onappend._init(can, meta, list, function(sub) { can.base.isFunc(cb) && cb(sub, true), can.onmotion.delay(can, sub.Focus) }, target) },
|
||||
}, list, function(sub) { meta.feature = can.base.Obj(meta.feature, {}), sub.Conf(meta), field._can = sub
|
||||
can.onappend.style(sub, meta.index? meta.index.split(nfs.PT): meta.name), can.onappend.style(sub, sub.Conf(ctx.STYLE)), can.onappend.style(sub, sub.Mode())
|
||||
can.onappend.style(sub, meta.index? meta.index.split(nfs.PT): meta.name)
|
||||
can.onappend.style(sub, sub.Conf(ctx.STYLE))
|
||||
can.onappend.style(sub, sub.Conf("_style"))
|
||||
can.onappend.style(sub, sub.Mode())
|
||||
sub.isCmdMode() && can.onappend.style(sub, can.misc.Search(can, ctx.STYLE)), sub.isCmdMode() && sub.Conf(can.misc.Search(can))
|
||||
sub._trans = can.base.Copy(sub._trans||{}, can.core.Value(sub, [chat.ONACTION, chat._TRANS]))
|
||||
can.core.Item(meta.feature, function(key, cb) { cb.help && sub.user.trans(sub, kit.Dict(key, cb.help)) })
|
||||
@ -252,6 +253,7 @@ Volcanos(chat.ONAPPEND, {
|
||||
var auto; can.core.Next(can.core.Value(can, [chat.ONIMPORT, mdb.LIST])||meta.inputs, add, function() {
|
||||
var p = can.misc.Search(can, ctx.ACTION); auto || can.page.style(can, can._target, "visibility", "")
|
||||
can.isCmdMode() || can.page.style(can, can._target, "visibility", "")
|
||||
if (can.Conf("feature.mode") == "result") { return }
|
||||
if (can.Conf("_ismain") && !can.Conf("_role") && can.misc.Search(can, log.DEBUG) != ice.TRUE) {
|
||||
|
||||
} else if (p && can.isCmdMode()) {
|
||||
@ -301,9 +303,10 @@ Volcanos(chat.ONAPPEND, {
|
||||
open: !can.isCmdMode() && "打开链接",
|
||||
// chat: "发送聊天",
|
||||
}: {_space: "",
|
||||
qrcode: !can.isCmdMode() && "生成链接",
|
||||
full: !can.isCmdMode() && "切换全屏",
|
||||
open: !can.isCmdMode() && "打开链接",
|
||||
chat: can.user.isTechOrRoot(can) && can.ConfIndex() != chat.MESSAGE && "发送聊天",
|
||||
// chat: can.user.isTechOrRoot(can) && can.ConfIndex() != chat.MESSAGE && "发送聊天",
|
||||
// help: can.page.ClassList.has(can, can._fields||can._target, html.PLUGIN) && can.Conf("_help") && can.Conf("_help") != "" && "查看文档",
|
||||
}, function(key, value) {
|
||||
return (value || value === "") && {view: [[html.ITEM, html.BUTTON, key, mdb.ICONS, "state"]], list: [{icon: icon[key]}],
|
||||
@ -340,7 +343,7 @@ Volcanos(chat.ONAPPEND, {
|
||||
Volcanos(display, {_root: can._root, _follow: can.core.Keys(can._follow, display), _fields: can._target, _target: output, _path: display||chat.PLUGIN_TABLE_JS,
|
||||
_legend: can._legend, _option: can._option, _action: action||can._action, _output: output, _status: status||can._status,
|
||||
Update: can.Update, Option: can.Option, Action: can.Action, Status: can.Status, db: {hash: [""], value: {}}, ui: {layout: function() {}},
|
||||
}, [display, msg.Option(ice.MSG_DISPLAY_CSS)||undefined, chat.PLUGIN_TABLE_JS], function(sub) { sub.Conf(can.Conf())
|
||||
}, [display, msg.Option(ice.MSG_DISPLAY_CSS)||can.Conf("display_css")||undefined, chat.PLUGIN_TABLE_JS], function(sub) { sub.Conf(can.Conf())
|
||||
sub.db.hash = can.base.getValid(can.isCmdMode()? can.misc.SearchHash(can): [], can.onexport.storage(can, "hash"))||[]
|
||||
var last = can.sub; last && can.core.CallFunc([last, "onaction.hidden"], {can: last})
|
||||
sub.run = function(event, cmds, cb, silent) { var msg = sub.request(event)._caller()
|
||||
@ -352,6 +355,7 @@ Volcanos(chat.ONAPPEND, {
|
||||
can.onmotion.clear(can, can._option), can.onappend._option(can, {inputs: can.page.inputs(can, sub.onimport.list, html.TEXT) })
|
||||
} can.onmotion.toggle(can, can._action, true), delete(can._status._cache), delete(can._status._cache_key)
|
||||
var output_old = can._output; sub._target = sub._output = can._output = output = can.page.insertBefore(can, [html.OUTPUT], can._status)
|
||||
can.page.style(can, sub._output, html.MAX_HEIGHT, can.ConfHeight(), html.MAX_WIDTH, can.ConfWidth())
|
||||
if (sub.Mode() == ice.MSG_RESULT) { can._output.innerHTML = output_old.innerHTML }
|
||||
if (can.page.tagis(can._target, "fieldset.cmd.form.output")) {
|
||||
can.page.ClassList.del(can, can._target, html.FORM), can.page.ClassList.del(can, can._target, html.OUTPUT)
|
||||
@ -384,12 +388,11 @@ Volcanos(chat.ONAPPEND, {
|
||||
})
|
||||
},
|
||||
_status: function(can, list, status, msg) { list && list.Option && (list = list.Option(ice.MSG_STATUS)||[])
|
||||
var keys = {}, fileline = can.Conf("_fileline")||""
|
||||
status = status||can._status, can.onmotion.clear(can, status)
|
||||
var keys = {}
|
||||
var fileline = can.Conf("_fileline")||""
|
||||
can.core.List((can.base.Obj(list, can.core.Value(can, [chat.ONEXPORT, mdb.LIST]))||[]).concat([
|
||||
can.ConfSpace() && {name: web.SPACE, value: can.ConfSpace()},
|
||||
], can.misc.Search(can, log.DEBUG) == ice.TRUE? [
|
||||
], can.misc.Search(can, log.DEBUG) == ice.TRUE && can.ConfIndex() != code.VIMER? [
|
||||
fileline && {name: nfs.SOURCE, value: can.base.trimPrefix(fileline.split("?")[0], nfs.REQUIRE, nfs.P), onclick: function(event) { can.onkeymap.prevent(event)
|
||||
var ls = can.misc.SplitPath(can, fileline); if (event.metaKey) {
|
||||
can.user.open(can.misc.MergePodCmd(can, {pod: can.ConfSpace(), cmd: web.CODE_VIMER, path: ls[0], file: ls[1]}))
|
||||
@ -435,14 +438,13 @@ Volcanos(chat.ONAPPEND, {
|
||||
|
||||
field: function(can, type, item, target) { type = type||html.STORY, item = item||{}
|
||||
var name = can.core.Split(item.nick||item.index||"", " .").pop()||""; can.base.isIn(name,
|
||||
"cluster",
|
||||
"launchTemplate",
|
||||
"cluster", "launchTemplate",
|
||||
tcp.SERVER, tcp.CLIENT, web.STUDIO, mdb.SEARCH, web.SERVICE,
|
||||
can.core.Split(can.ConfIndex(), nfs.PT).pop()
|
||||
) && (name = (item.index||"").split(nfs.PT).slice(-2).join(nfs.PT))
|
||||
type == html.PLUG || (type == html.STORY && item.style != html.FLOAT) ||
|
||||
// can.base.isIn(can.ConfIndex(), web.DESKTOP, web.MESSAGE, web.VIMER) ||
|
||||
(name = can.core.Keys(item.space||item._space, name))
|
||||
(name = can.core.Keys(can.base.trimPrefix(item.space||item._space, can.ConfSpace()), name))
|
||||
item.index && (item.help = item.help||can.user.trans(can, item.index.split(".").pop(), ""))
|
||||
var title = item.title || can.user.isMobile && (can.user.isEnglish(can)? name: (item.help||name)) || (!item.help || name == item.help || can.user.isEnglish(can)? name: name+"("+can.core.Split(item.help)[0]+")")
|
||||
target = can.base.isFunc(target)? target(): target
|
||||
@ -470,6 +472,10 @@ Volcanos(chat.ONAPPEND, {
|
||||
}
|
||||
}
|
||||
input.onclick = item.onclick
|
||||
if (item.type == html.PASSWORD) {
|
||||
input.placeholder = can.user.trans(can, input.placeholder||input.name, item._trans, html.INPUT)
|
||||
input.title = can.user.trans(can, input.title||input.placeholder||input.name, item._trans, html.INPUT)
|
||||
}
|
||||
if (item.type == html.TEXT) {
|
||||
if (!can.user.isMobile) {
|
||||
input.placeholder = can.user.trans(can, input.placeholder||input.name, item._trans, html.INPUT)
|
||||
@ -485,7 +491,7 @@ Volcanos(chat.ONAPPEND, {
|
||||
can.core.CallFunc([event.target.previousSibling, "_clear"], {})
|
||||
}})
|
||||
if (item.name == html.FILTER) { item.icon = item.icon||icon.search }
|
||||
item.icon = item.icon||can.Conf(["_icons", item.name])||icon[item.name]
|
||||
item.icon = item.icon||can.Conf(["_trans.input.icons", item.name])||can.Conf(["_icons", item.name])||icon[item.name]
|
||||
}
|
||||
if (item.type == html.MULTIPLE) {
|
||||
input.data.type = html.BUTTON, input.value = can.user.trans(can, item.name)
|
||||
@ -559,7 +565,7 @@ Volcanos(chat.ONAPPEND, {
|
||||
var carte = can.user.carte(event, can, {}, can.core.List(item.values, function(item) {
|
||||
return can.user.trans(can, item, null, html.VALUE)
|
||||
}), function(event, button) { carte.close()
|
||||
if (target.value != button) { target.value = button, select.value = trans[button], select.onchange && select.onchange({target: select}) }
|
||||
if (target.value != button) { target.value = button, select.value = trans[button], select.onchange && select.onchange(event) }
|
||||
return true
|
||||
}); can.onappend.style(can, [html.SELECT, item.name], carte._target), can.page.style(can, carte._target, html.MIN_WIDTH, event.target.offsetWidth)
|
||||
can.page.Select(can, carte._target, html.DIV_ITEM, function(item) {
|
||||
@ -645,6 +651,15 @@ Volcanos(chat.ONAPPEND, {
|
||||
}
|
||||
}
|
||||
var option = can.core.Item(can.Option())
|
||||
if (can.core.List(option).length == 1) {
|
||||
if (msg.IsDetail()) {
|
||||
var key = can.core.List(option)[0], i = msg.key.indexOf(key)
|
||||
if (i > 0) { var k = msg.key[i], v = msg.value[i]; for (i; i > 0; i--) { msg.key[i] = msg.key[i-1], msg.value[i] = msg.value[i-1] } msg.key[0] = k, msg.value[0] = v }
|
||||
} else {
|
||||
var key = can.core.List(option)[0], i = msg.append.indexOf(key)
|
||||
if (i > 0) { var v = msg.append[i]; for (i; i > 0; i--) { msg.append[i] = msg.append[i-1] } msg.append[0] = v }
|
||||
}
|
||||
}
|
||||
var table = can.page.AppendTable(can, msg, target||can.ui.content||can._output, msg.append, cb||function(value, key, index, data, list) { var _value = value
|
||||
if (msg.IsDetail()) { if (key == mdb.VALUE) { key = data.key } data = {}
|
||||
can.core.List(list, function(item) { data[item.key] = item.value })
|
||||
@ -661,11 +676,10 @@ Volcanos(chat.ONAPPEND, {
|
||||
if (key == "user_avatar" && value) { _value = img(can.misc.Resource(can, data[key])) }
|
||||
if (key == "auth_avatar" && value) { _value = img(can.misc.Resource(can, data[key])) }
|
||||
if (key == nfs.IMAGE && value) { _value = can.core.List(can.core.Split(data[key]), function(item) { return img(can.misc.ShareCache(can, item, data.space)) }).join("") }
|
||||
// if (key == web.SPACE && value) { _value = can.page.Format(html.A, can.misc.MergePodCmd(can, {pod: value}), value) }
|
||||
// if (key == mdb.NAME && value) { _value = can.user.trans(can, value, null, html.INPUT) }
|
||||
if (key == mdb.HASH && can.ConfIndex() == web.TOKEN) { _value = value.slice(0, 4)+"****" }
|
||||
if (key == "secretKey" && value) { _value = value.slice(0, 4)+"****" }
|
||||
if (key == mdb.HASH && can.base.isIn(can.ConfIndex(), "share", "web.share", web.TOKEN, aaa.SESS)) { _value = value.slice(0, 4)+"****" }
|
||||
if (key == "secret" && value) { _value = value.slice(0, 4)+"****" }
|
||||
if (key == "secretKey" && value) { _value = value.slice(0, 4)+"****" }
|
||||
if (key == "SecretKey" && value) { _value = value.slice(0, 4)+"****" }
|
||||
if (key == web.TOKEN && value) { _value = value.slice(0, 4)+"****" }
|
||||
if (key == aaa.PASSWORD && value) { _value = "********" }
|
||||
function onclick() { return false }
|
||||
@ -699,8 +713,7 @@ Volcanos(chat.ONAPPEND, {
|
||||
} else {
|
||||
can.sup.onimport.change(event, can.sup, key, value, null, data) || can.sup.onexport.record(can.sup, value, key, data, event)
|
||||
}
|
||||
}, ondblclick: function(event) { if (can.base.isIn(key, mdb.KEY, mdb.HASH, mdb.ID)) { return }
|
||||
if (can.user.isMobile) { return }
|
||||
}, ondblclick: function(event) { if (can.base.isIn(key, mdb.KEY, mdb.HASH, mdb.ID)) { return } if (can.user.isMobile) { return }
|
||||
var item = can.core.List(can.Conf([ctx.FEATURE, mdb.INSERT]), function(item) { if (item.name == key) { return item } })[0]||{name: key, value: value}
|
||||
item.run = function(event, cmds, cb) { can.run(request(event), cmds, cb, true) }
|
||||
item._enter = function(event, value) { if (event.ctrlKey) { run(event, mdb.MODIFY, [key, value.trimRight()]) } }
|
||||
@ -711,7 +724,10 @@ Volcanos(chat.ONAPPEND, {
|
||||
can.page.SelectChild(can, can._option, html.DIV_ITEM_TEXT, function(target) { can.page.ClassList.set(can, target, "will", can.page.ClassList.has(can, target, key)) })
|
||||
}, _init: function(target) {
|
||||
if (msg.IsDetail() && key != "key") { can.onappend.style(can, key, target.parentNode) }
|
||||
if (option.indexOf(key) > -1) { can.onappend.style(can, "k-"+(value.split(">").pop()), target.parentNode) }
|
||||
if (option.indexOf(key) > -1) {
|
||||
can.onappend.style(can, "k-"+(value.split(">").pop()), target.parentNode)
|
||||
if (msg.IsDetail()) { can.onappend.style(can, html.OPTION, target.parentNode) }
|
||||
}
|
||||
if (key == mdb.TYPE) { can.onappend.style(can, value, target.parentNode) }
|
||||
if (key == mdb.STATUS) { can.onappend.style(can, value, target.parentNode) }
|
||||
if (key == mdb.ENABLE) { can.onappend.style(can, value == ice.FALSE? mdb.DISABLE: mdb.ENABLE, target.parentNode) }
|
||||
@ -723,6 +739,7 @@ Volcanos(chat.ONAPPEND, {
|
||||
})
|
||||
can.core.List(list, function(target) { can.onappend.style(can, html.ICONS, target);
|
||||
var _icon = (can.page.icons(can, target.name)||{}).icon; if (target.name == mdb.DELETE) { _icon = icon.trash }
|
||||
target.value = can.user.trans(can, target.name)
|
||||
can.page.insertBefore(can, [{icon: _icon+(" "+(can.page.buttonStyle(can, target.name)||"")), title: can.user.trans(can, target.name), onclick: target.onclick||function(event) {
|
||||
can.onengine.signal(can, "onevent", can.request(event, {_type: html.BUTTON}))
|
||||
can.Update(request(event)._event, [ctx.ACTION, target.name]), can.onkeymap.prevent(event)
|
||||
@ -732,6 +749,7 @@ Volcanos(chat.ONAPPEND, {
|
||||
})
|
||||
keys && can.page.RangeTable(can, table, can.core.List(keys, function(key) { return can.page.Select(can, table, html.TH, function(th, index) { if (th.innerHTML == key) { return index } })[0] }))
|
||||
can.onappend.style(can, chat.CONTENT, table), msg.append && msg.append[msg.append.length-1] == ctx.ACTION && can.onappend.style(can, ctx.ACTION, table)
|
||||
if (can.core.List(option).length == 1) { can.onappend.style(can, html.OPTION, table) }
|
||||
if (msg.IsDetail()) { can.onappend.style(can, mdb.DETAIL, table), can.onappend.style(can, msg.Append(mdb.TYPE), table), can.onappend.style(can, msg.Append(mdb.STATUS), table) }
|
||||
can.onappend.style(can, html.FULL, table)
|
||||
return table
|
||||
@ -747,19 +765,24 @@ Volcanos(chat.ONAPPEND, {
|
||||
var height = can.base.Max(720, can.ConfHeight()); can.page.style(can, target, html.HEIGHT, height, html.WIDTH, can.ConfWidth())
|
||||
}) } else if (text.indexOf("<svg") > 0) { can.page.Select(can, code, html.SVG, function(target) {
|
||||
can.page.style(can, target, html.MIN_HEIGHT, can.ConfHeight(), html.MIN_WIDTH, can.ConfWidth())
|
||||
}) } else { can.page.Select(can, code, html.INPUT_BUTTON, function(target) {
|
||||
target.onclick = function(event) {
|
||||
if (can.page.ClassList.has(can, target, "disable")) { return } can.page.ClassList.add(can, target, "disable")
|
||||
can.Update(can.request(event, can.Option(), {_toast: target.name, _cancel: function(event) {
|
||||
can.page.ClassList.del(can, target, "disable")
|
||||
}}), [ctx.ACTION, target.name], function(msg) {
|
||||
can.page.ClassList.del(can, target, "disable")
|
||||
var sup = can._fields? can.sup: can; if (sup.onimport._process(sup, msg)) { return }
|
||||
})
|
||||
}
|
||||
var style = can.page.buttonStyle(can, target.name)
|
||||
can.onappend.style(can, style, target)
|
||||
}) } return code.scrollBy && code.scrollBy(0, 10000), code
|
||||
}) } else {
|
||||
can.page.Select(can, code, html.INPUT_BUTTON, function(target) {
|
||||
target.onclick = function(event) {
|
||||
if (can.page.ClassList.has(can, target, "disable")) { return } can.page.ClassList.add(can, target, "disable")
|
||||
can.Update(can.request(event, can.Option(), {_toast: target.name, _cancel: function(event) {
|
||||
can.page.ClassList.del(can, target, "disable")
|
||||
}}), [ctx.ACTION, target.name], function(msg) {
|
||||
can.page.ClassList.del(can, target, "disable")
|
||||
var sup = can._fields? can.sup: can; if (sup.onimport._process(sup, msg)) { return }
|
||||
})
|
||||
}
|
||||
var style = can.page.buttonStyle(can, target.name)
|
||||
can.onappend.style(can, style, target)
|
||||
})
|
||||
can.page.Select(can, code, html.A, function(target) {
|
||||
target.target = "_blank"
|
||||
})
|
||||
} return code.scrollBy && code.scrollBy(0, 10000), code
|
||||
},
|
||||
tools: function(can, msg, cb, target) { can.onimport.tool(can, can.base.Obj(msg.Option(ice.MSG_TOOLKIT))||[], cb, target) },
|
||||
style: function(can, style, target) { if (!style) { return }
|
||||
@ -876,8 +899,8 @@ Volcanos(chat.ONAPPEND, {
|
||||
can.onexport.session(can, "profile.show", can.page.isDisplay(can.ui.profile))
|
||||
if (can.isCmdMode()) { var _width = can.ConfWidth()
|
||||
can.page.SelectChild(can, can._fields, "legend,form.option,div.header", function(target) { _width -= target.offsetWidth })
|
||||
can.page.SelectChild(can, can._fields, "div.action", function(target) { can.page.style(can, target, html.MAX_WIDTH, _width-1)
|
||||
can.page.Select(can, target, "span.name", function(target, index, list) { can.page.style(can, target, html.MAX_WIDTH, (_width-50)/list.length-40) })
|
||||
can.page.SelectChild(can, can._fields, html.DIV_ACTION, function(target) { can.page.style(can, target, html.MAX_WIDTH, _width-21)
|
||||
// can.page.Select(can, target, "span.name", function(target, index, list) { can.page.style(can, target, html.MAX_WIDTH, (_width-50)/list.length-40) })
|
||||
})
|
||||
}
|
||||
if (can.page.isDisplay(can.ui.display)) {
|
||||
@ -1097,12 +1120,16 @@ Volcanos(chat.ONMOTION, {
|
||||
},
|
||||
scrollHold: function(can, cb, target) { target = target || can._output; var left = target.scrollLeft; cb(), target.scrollLeft = left },
|
||||
scrollIntoView: function(can, target, margin, parent) { if (!target) { return }
|
||||
margin = margin||0, parent = parent||target.parentNode
|
||||
if (!parent) { return }
|
||||
if (parent._scroll) { return } parent._scroll = true
|
||||
var offset = (target.offsetTop-margin) - parent.scrollTop, step = offset < 0? -20: 20
|
||||
if (Math.abs(offset) > 3000) { return parent.scrollTop = (target.offsetTop-margin), delete(parent._scroll) }
|
||||
can.core.Timer({interval: 10, length: offset/step}, function() { parent.scrollTop += step }, function() { parent.scrollTop = (target.offsetTop-margin), delete(parent._scroll) })
|
||||
margin = margin||0, parent = parent||target.parentNode; if (!parent) { return } if (parent._scroll) { return } parent._scroll = true
|
||||
if (target.offsetHeight == parent.offsetHeight) { margin = margin||10
|
||||
var offset = (target.offsetLeft-margin) - parent.scrollLeft, step = offset < 0? -20: 20
|
||||
if (Math.abs(offset) > 3000) { return parent.scrollLeft = (target.offsetLeft-margin), delete(parent._scroll) }
|
||||
can.core.Timer({interval: 10, length: offset/step}, function() { parent.scrollLeft += step }, function() { parent.scrollLeft = (target.offsetLeft-margin), delete(parent._scroll) })
|
||||
} else {
|
||||
var offset = (target.offsetTop-margin) - parent.scrollTop, step = offset < 0? -20: 20
|
||||
if (Math.abs(offset) > 3000) { return parent.scrollTop = (target.offsetTop-margin), delete(parent._scroll) }
|
||||
can.core.Timer({interval: 10, length: offset/step}, function() { parent.scrollTop += step }, function() { parent.scrollTop = (target.offsetTop-margin), delete(parent._scroll) })
|
||||
}
|
||||
},
|
||||
clearFloat: function(can) {
|
||||
var list = ["fieldset.input.float", "div.input.float", "div.carte.float", "div.toast.float"]; for (var i = 0; i < list.length; i++) {
|
||||
@ -1180,11 +1207,10 @@ Volcanos(chat.ONMOTION, {
|
||||
return can.core.Timer(interval||30, function() { cb(self, last, can._delay_list.meta[key]) })
|
||||
},
|
||||
float: function(can) { var target = can._fields||can._target, sup = can._fields? can.sup: can
|
||||
var margin = (can.getFooterHeight()||html.ACTION_HEIGHT)+(can.user.isMobile? html.ACTION_HEIGHT: 0)+html.PLUGIN_MARGIN
|
||||
var height = can.base.Max(html.FLOAT_HEIGHT, can.page.height()-can.getHeaderHeight()-margin), width = can.base.Max(html.FLOAT_WIDTH, can.page.width()-can.getRiverWidth()-2*html.PLUGIN_MARGIN)
|
||||
var height = can.base.Max(can.Conf("_height")||html.FLOAT_HEIGHT, can.page.height()-can.getHeaderHeight()-can.getFooterHeight()-2*html.PLUGIN_MARGIN), width = can.base.Max(can.Conf("_width")||html.FLOAT_WIDTH, can.page.width()-can.getRiverWidth()-2*html.PLUGIN_MARGIN)
|
||||
sup.onimport.size(sup, height, width, false), can.onappend.style(can, html.FLOAT)
|
||||
can.onmotion.resize(can, target, function(height, width) { sup.onimport.size(sup, height, width, false) }, can.getHeaderHeight(), can.getRiverWidth())
|
||||
var left = can.page.width()-width-html.PLUGIN_MARGIN, top = can.page.height()-height-margin
|
||||
var left = can.page.width()-width-html.PLUGIN_MARGIN, top = can.page.height()-height-can.getFooterHeight()-html.PLUGIN_MARGIN
|
||||
can.page.style(can, target, html.LEFT, left, html.TOP, top)
|
||||
target.onclick = function(event) {
|
||||
can.page.Select(can, document.body, html.FIELDSET_FLOAT, function(_target) {
|
||||
@ -1294,7 +1320,9 @@ Volcanos(chat.ONMOTION, {
|
||||
can.page.style(can, target, html.LEFT, margin)
|
||||
can.core.Timer({interval: 10, length: 30}, function(timer, interval, index, list) {
|
||||
can.page.style(can, target, html.LEFT, margin-(index+1)*(margin/list.length))
|
||||
}, function() {})
|
||||
}, function() {
|
||||
can.onmotion.delay(can, function() { can._root.Action.onlayout._init(can) })
|
||||
})
|
||||
},
|
||||
slideOut: function(can, cb) { var margin = 100
|
||||
var target = can._target
|
||||
@ -1303,6 +1331,7 @@ Volcanos(chat.ONMOTION, {
|
||||
can.page.style(can, target, html.LEFT, (index+1)*(margin/list.length))
|
||||
}, function() {
|
||||
can.page.Remove(can, target), cb && cb()
|
||||
can.onmotion.delay(can, function() { can._root.Action.onlayout._init(can) })
|
||||
})
|
||||
},
|
||||
slideAction: function(can, target) {
|
||||
|
146
index.css
146
index.css
@ -46,8 +46,8 @@ body {
|
||||
--header-height:48px; --footer-height:var(--action-height);
|
||||
--action-height:32px; --status-height:32px; --textarea-height:96px;
|
||||
--input-width:140px; --button-width:60px; --form-width:360px; --url-input-width:480px;
|
||||
--card-width:300px; --card-height:160px; --qrcode-width:360px; --qrcode-height:363px;
|
||||
--story-height:var(--float-height); --iframe-height:420px;
|
||||
--card-width:300px; --card-height:160px; --qrcode-width:320px; --qrcode-height:323px;
|
||||
--story-height:var(--float-height); --iframe-height:480px;
|
||||
--plug-height:480px; --plug-width:var(--float-width);
|
||||
--desktop-height:684px; --desktop-width:var(--float-width);
|
||||
--desktop-menu-height:25px; --desktop-width:var(--float-width);
|
||||
@ -79,6 +79,7 @@ body {
|
||||
--code-package:lightskyblue; --code-datatype:lavender; --code-object:silver;
|
||||
}
|
||||
}
|
||||
body.light { --panel-bg-color:black; --panel-fg-color:silver; }
|
||||
body.width6 { /* 1920-2240 大显示器 */
|
||||
--project-width:280px; --river-width:280px; --input-width:180px; --url-input-width:1000px;
|
||||
--qrcode-width:420px; --card-height:160px;
|
||||
@ -119,12 +120,7 @@ table.content th.select[data-asc="0"] i.bi-sort-up { display:none; }
|
||||
table.content th.select[data-asc="1"] i.bi-sort-down-alt { display:none; }
|
||||
table.content td.option { cursor:pointer; }
|
||||
table.content td { padding:var(--table-padding); }
|
||||
fieldset.log.debug table.content td:last-child {
|
||||
// white-space:pre-line;
|
||||
// word-break:break-all;
|
||||
white-space:pre;
|
||||
max-width:800px; min-width:600px;
|
||||
}
|
||||
fieldset.log.debug table.content td:last-child { white-space:pre; max-width:800px; min-width:600px; }
|
||||
table.content td i { padding:var(--input-padding); }
|
||||
table.content:not(.detail) td img { height:48px; width:auto; }
|
||||
table.content:not(.detail) td input.icons { display:none; }
|
||||
@ -140,28 +136,30 @@ table.content.action td:last-child input.danger { border:none; color:var(--dange
|
||||
table.content.action td:last-child input.danger:hover { background-color:var(--hover-bg-color); color:var(--danger-bg-color); }
|
||||
table.content.detail td:first-child { word-break:keep-all; white-space:pre; }
|
||||
table.content.detail td:first-child { text-align:center; }
|
||||
table.content.detail td:first-child { background-color:var(--plugin-bg-color); position:sticky; left:0; }
|
||||
table.content.detail td:first-child { position:sticky; left:0; }
|
||||
table.content.option td.option { position:sticky; left:2px; z-index:1; box-shadow:var(--box-shadow); background-color:var(--th-bg-color); }
|
||||
table.content.option th.option { position:sticky; left:2px; z-index:2; }
|
||||
table.content.option.checkbox td.option { left:50px; }
|
||||
table.content.option.checkbox th.option { left:50px; }
|
||||
table.content.detail tr td:first-child { background-color:var(--plugin-bg-color); cursor:default; }
|
||||
body:not(.mobile) table.content.detail tr:hover:not(.action) td:first-child { background-color:var(--hover-bg-color); }
|
||||
table.content.detail td i { display:none; }
|
||||
table.content.detail td { white-space:break-spaces; }
|
||||
table.content.detail tr.action { background-color:var(--plugin-bg-color); position:sticky; bottom:0; }
|
||||
table.content.detail tr.action input.icons { display:none; }
|
||||
table.content.detail tr.action input { color:var(--notice-bg-color); }
|
||||
table.content.detail tr.action input.danger { color:var(--danger-bg-color); }
|
||||
table.content.detail tr.action input.notice:not(:hover) { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
|
||||
table.content.detail tr.action i { display:unset; color:var(--notice-bg-color); }
|
||||
table.content.detail tr.action i.bi-trash { color:var(--danger-bg-color); }
|
||||
fieldset.plugin.cmd.output>div.output { top:0; }
|
||||
div.output._prepare { position:absolute; }
|
||||
div.output._unload { position:absolute; }
|
||||
fieldset._process input {
|
||||
// border:var(--box-border) !important;
|
||||
background-color:transparent !important;
|
||||
color:var(--disable-fg-color) !important;
|
||||
}
|
||||
body.mobile table.content.checkbox th:first-child { padding:var(--table-padding) var(--input-padding); }
|
||||
body.mobile table.content.checkbox td:first-child { padding:var(--table-padding) var(--input-padding); }
|
||||
body.mobile table.content.action th:last-child { padding:var(--table-padding) var(--input-padding); }
|
||||
body.mobile table.content.action td:last-child { padding:var(--table-padding) var(--input-padding); }
|
||||
body.mobile table.content.detail thead { display:none; }
|
||||
fieldset._process input { background-color:transparent !important; color:var(--disable-fg-color) !important; }
|
||||
body.width1 table.content.checkbox th:first-child { padding:var(--table-padding) var(--input-padding); }
|
||||
body.width1 table.content.checkbox td:first-child { padding:var(--table-padding) var(--input-padding); }
|
||||
body.width1 table.content.action th:last-child { padding:var(--table-padding) var(--input-padding); }
|
||||
body.width1 table.content.action td:last-child { padding:var(--table-padding) var(--input-padding); }
|
||||
body.width1 table.content.detail thead { display:none; }
|
||||
table.content input { border:none; background-color:var(--th-bg-color); padding:var(--input-padding); }
|
||||
table.content input:not(:last-child) { margin-right:var(--input-margin); }
|
||||
body:not(.mobile) fieldset.Action:not(.tabview):not(.horizon):not(.grid) fieldset.plugin:not(.float):not(.full):not(.cmd)>div.output>table.content td i { display:none; }
|
||||
@ -180,7 +178,6 @@ div.title>div.status>div.item.access { background-color:var(--danger-bg-color);
|
||||
div.title>div.status>div.item>i { margin-right:var(--input-margin); }
|
||||
fieldset.store>div.output>fieldset.story:not(.float) { display:none; }
|
||||
div.output.card>div.item { padding:var(--plugin-padding); margin:var(--plugin-padding); min-width:120px; position:relative; float:left; }
|
||||
div.output.card>div.item { background-color:var(--plugin-bg-color); color:var(--plugin-fg-color); }
|
||||
div.output.card>div.item:hover { background-color:var(--plugin-bg-color); color:var(--plugin-fg-color); }
|
||||
div.output.card>div.item.stop { color:var(--disable-fg-color); }
|
||||
div.output.card>div.item>div.title { border-bottom:var(--box-border); font-size:var(--legend-font-size); font-weight:bold; padding-bottom:var(--input-padding); display:flex; align-items:center; }
|
||||
@ -190,11 +187,10 @@ div.output.card>div.item>div.title>div.title>span.exists { color:var(--notice-bg
|
||||
div.output.card>div.item>div.title>img { height:var(--header-height); width:var(--header-height); margin:0; float:left; }
|
||||
div.output.card>div.item>div.title>img.jpg { padding:var(--input-padding); }
|
||||
div.item.card:not(.hide) { position:relative; display:flex; align-items:center; padding:0; }
|
||||
// div.output>div.item.card { border:solid 5px var(--plugin-bg-color); }
|
||||
div.item.card img { height:60px; width:60px; margin:5px; }
|
||||
div.item.card div.info { width:100%; }
|
||||
div.item.card div.title { font-size:16px; }
|
||||
div.item.card div.title span { margin-right:5px; }
|
||||
div.item.card div.title span { margin-right:5px; white-space:pre; }
|
||||
div.item.card div.title span.type { border:var(--box-notice); color:var(--notice-bg-color); font-size:12px; padding:0 5px; }
|
||||
div.item.card div.title span.role { border:var(--box-notice); color:var(--notice-bg-color); font-size:12px; padding:0 5px; }
|
||||
div.item.card div.title span.status { border:var(--box-notice); color:var(--notice-bg-color); font-size:12px; padding:0 5px; }
|
||||
@ -203,13 +199,16 @@ div.item.card div.status span { margin-right:5px; }
|
||||
div.item.card div.action { max-width:100%; display:flex; align-items:center; }
|
||||
div.item.card div.action { position:absolute; right:0; }
|
||||
div.item.card div.title div.action { top:0; }
|
||||
body:not(.mobile) div.item.card div.action { z-index:1; }
|
||||
body:not(.width1) div.item.card div.action { z-index:1; }
|
||||
div.item.card div.action input[type=button] { background-color:transparent; border:none; color:var(--notice-bg-color); margin-left:5px; }
|
||||
body:not(.mobile) div.item.card div.action input[type=button]:hover { background-color:var(--hover-bg-color); }
|
||||
div.item.card div.action input[type=button].danger { color:var(--danger-bg-color) }
|
||||
body:not(.mobile) div.item.card div.action input[type=button].notice:hover { border:var(--box-notice); }
|
||||
div.item.card div.action input[type=button].notice:not(:hover) { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
|
||||
div.item.card div.action input[type=button]:last-child { margin-right:5px; }
|
||||
div.item.card div.output { padding:10px 0; display:flex; transition:left .2s; }
|
||||
body.mobile div.item.card div.output { width:100%; }
|
||||
body.mobile div.item.card div.output { background-color:var(--output-bg-color); }
|
||||
body.width1 div.item.card div.output { width:100%; }
|
||||
body.width1 div.item.card div.output { background-color:var(--output-bg-color); }
|
||||
div.item.card.select div.title { font-weight:bold; }
|
||||
div.item.card.select div.output { transition:left .5s; }
|
||||
div.item img[src*=".ico"] { padding:3px; }
|
||||
@ -228,11 +227,12 @@ div.output>div.code>div.form { text-align:center; font-size:15px; padding:60px 1
|
||||
div.output>div.code>div.form>input[type=button] { min-width:200px; }
|
||||
div.output>div.code>div.form>input[type=button][name=confirm] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); margin:var(--button-margin) 0; }
|
||||
body.en span[lang^=zh] { display:none; } body.zh span[lang^=en] { display:none; }
|
||||
fieldset>div.action { position:relative; }
|
||||
fieldset.plugin.cmd:not(.output)>form.option { float:left; display:flex !important; }
|
||||
fieldset.plugin.cmd:not(.output)>div.action { float:left; display:flex !important; flex-grow:1; height:var(--action-height); overflow:auto; }
|
||||
fieldset.plugin.cmd:not(.output)>div.action div.tabs { margin-left:var(--button-margin); }
|
||||
fieldset.plugin.cmd:not(.output)>div.action div.tabs:last-child { margin-right:var(--button-margin); }
|
||||
fieldset.plugin.cmd:not(.output)>div.action div.tabs:first-child { margin-left:var(--button-margin); }
|
||||
fieldset.plugin.cmd:not(.output)>div.action div.tabs.select { padding-top:2px; }
|
||||
fieldset.plugin.cmd:not(.output)>div.action div.tabs.select { padding-top:2px; color:var(--hover-fg-color); }
|
||||
fieldset.plugin.cmd:not(.output)>div.action div.tabs>span.name { overflow:hidden; }
|
||||
fieldset.plugin.cmd:not(.output)>div.header { float:right; display:flex; flex-direction:row-reverse; }
|
||||
body.width2 fieldset.plugin.cmd:not(.output)>div.header { display:none; }
|
||||
@ -406,11 +406,11 @@ body div.input.float tr { margin:var(--button-margin); }
|
||||
body div.input.float td { padding:var(--table-padding); }
|
||||
body div.input.float td span.must { color:red; padding:0 5px; }
|
||||
body div.input.float td:nth-child(2) { padding:var(--table-padding) 0; }
|
||||
body.mobile div.input.float table { width:100%; }
|
||||
body.mobile div.input.float tr:not(.hide) { display:flex; flex-direction:column; margin:var(--button-margin); }
|
||||
body.mobile div.input.float td { padding:0 var(--button-padding); margin:var(--button-margin); }
|
||||
body.mobile div.input.float td:nth-child(1) { color:gray; font-size:var(--status-font-size); padding-left:var(--button-padding); margin-bottom:0; }
|
||||
body.mobile div.input.float td:nth-child(2) { display:none; }
|
||||
body.width1 div.input.float table { width:100%; }
|
||||
body.width1 div.input.float tr:not(.hide) { display:flex; flex-direction:column; margin:var(--button-margin); }
|
||||
body.width1 div.input.float td { padding:0; margin:var(--button-margin); }
|
||||
body.widht1 div.input.float td:nth-child(1) { color:gray; font-size:var(--status-font-size); padding-left:var(--button-padding); margin-bottom:0; }
|
||||
body.width1 div.input.float td:nth-child(2) { display:none; }
|
||||
body div.input.float tr.img td:last-child>span { display:none; }
|
||||
body div.input.float tr.img td:last-child>div.item { width:var(--river-width); flex-wrap:wrap; }
|
||||
body div.input.float tr.img td:last-child>div.item>div { background-color:gray; margin:var(--input-margin); }
|
||||
@ -420,18 +420,18 @@ body div.input.float tr.icon td:last-child { position:relative; }
|
||||
body div.input.float tr.icon td:last-child img:first-child { height:28px; width:28px; position:absolute; left:12px; top:12px; }
|
||||
body div.input.float tr.icon td:last-child input { padding-left:var(--action-height); }
|
||||
body div.input.float tr.icons td:last-child img { height:28px; width:28px; position:absolute; left:2px; top:2px; }
|
||||
body div.input.float tr.icons td:last-child span:not(.icon) { font-family:var(--code-font-family); position:absolute; left:33px; }
|
||||
body div.input.float tr.icons td:last-child span:not(.icon) { font-family:var(--code-font-family); position:absolute; left:33px; line-height:var(--action-height); }
|
||||
body div.input.float tr.icons td:last-child input { padding-left:var(--action-height); }
|
||||
body div.input.float td span.icon { margin-left:-20px; visibility:hidden; }
|
||||
body div.input.float td span.icons { margin-left:-20px; visibility:hidden; }
|
||||
body div.input.float td label { font-family:var(--code-font-family); }
|
||||
body div.input.float td:hover span.icon { visibility:visible; }
|
||||
body div.input.float td:hover span.icons { visibility:visible; }
|
||||
body:not(.mobile)>div.input.float textarea { height:var(--textarea-height); width:var(--form-width) !important; }
|
||||
body:not(.width1)>div.input.float textarea { height:var(--textarea-height); width:var(--form-width) !important; }
|
||||
body div.input.float select { width:var(--form-width) !important; }
|
||||
body div.input.float input.select[type=button] { width:var(--form-width) !important; }
|
||||
body div.input.float input:not([type=button]) { width:var(--form-width) !important; padding-left:24px; }
|
||||
body div.input.float input[type=text] { width:var(--form-width) !important; padding-left:24px; }
|
||||
body div.input.float input:not([type=button]) { width:var(--form-width) !important; padding:0 24px; }
|
||||
body div.input.float input[type=text] { width:var(--form-width) !important; padding:0 24px; }
|
||||
body div.input.float input[name=cancel] { border:var(--box-danger); background-color:transparent; color:var(--danger-bg-color); }
|
||||
body.mobile div.input.float input[name=submit] { border:var(--box-notice); background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
|
||||
body div.input.float input[name=submit]:hover { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
|
||||
@ -443,7 +443,7 @@ body>div.input.login { flex-direction:column; }
|
||||
body>div.input.login>div.action { border-bottom:var(--box-border); padding:0; flex-direction:row; }
|
||||
body>div.input.login>div.action>div.tabs { padding:var(--button-padding); }
|
||||
body>div.input.login>div.action>div.tabs.select { color:unset; }
|
||||
body>div.input.login>div.output { text-align:center; min-height:var(--qrcode-height); min-width:var(--iframe-height); overflow:hidden; clear:both; }
|
||||
body:not(.mobile)>div.input.login>div.output { text-align:center; min-height:var(--qrcode-height); min-width:var(--iframe-height); overflow:hidden; clear:both; }
|
||||
body>div.input.login>div.output>fieldset { box-shadow:unset; }
|
||||
body>div.input.login>div.output>fieldset>div.output { background-color:transparent; }
|
||||
body>div.input.login>div.display { padding-top:var(--button-padding); width:100%; flex-direction:column; }
|
||||
@ -451,6 +451,7 @@ body>div.input.login>div.display>label { color:var(--disable-fg-color); font-sty
|
||||
body>div.input.login>div.display>span.item { font-style:italic; word-break:break-all; border-left:var(--box-notice3); padding-left:var(--button-padding); margin:var(--button-margin) 0; }
|
||||
body>div.input.login>div.display div.sso { cursor:pointer; }
|
||||
body>div.input.login>div.display div.sso div.item { padding:var(--input-padding); }
|
||||
body.mobile>div.input.login>div.display div.sso div.item.relay { display:none; }
|
||||
body>div.input.login>div.display div.sso div.item:hover { background-color:var(--hover-bg-color); }
|
||||
body>div.input.login>div.display div.sso div.item>img { height:var(--action-height); width:var(--action-height); }
|
||||
body>div.input.login>div.display div.sso div.item>span { line-height:var(--action-height); padding:var(--input-padding); }
|
||||
@ -462,13 +463,14 @@ body>div.upload div.output div.progress { background-color:var(--progress-bg-col
|
||||
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; }
|
||||
body.mobile>div.input { margin:10px; width:calc(100% - 20px); left:0 !important; }
|
||||
body.mobile>div.input table { width:100%; }
|
||||
body.mobile>div.input td { padding:0; }
|
||||
body.mobile div.input.float table input { width:100% !important; }
|
||||
body.width1>div.input { margin:10px; width:calc(100% - 20px); left:0 !important; }
|
||||
body.width1>div.input table { width:100%; }
|
||||
body.width1>div.input td { padding:0; }
|
||||
body.width1 div.input.float table input[type=text] { width:100% !important; }
|
||||
/* display */
|
||||
fieldset:not(.Action) { position:relative; }
|
||||
fieldset>form.option:not(.hide), fieldset>div.action:not(.hide):not(.flex) { display:contents; } .hide, .hidden { display:none; }
|
||||
fieldset>form.option:not(.hide) { float:left; display:contents; }
|
||||
fieldset>div.action:not(.hide):not(.flex) { display:contents; } .hide, .hidden { display:none; }
|
||||
body:not(.mobile) fieldset:not(.Action):not(.output):not(.cmd)>div.action:not(.hide):not(.flex) { display:flex; overflow:hidden; }
|
||||
fieldset.panel>legend, fieldset.panel>div.status { display:none; }
|
||||
fieldset.output>legend, fieldset.output>form.option, fieldset.output>div.action:not(.flex), fieldset.output>div.status, fieldset.output>div.item { display:none; }
|
||||
@ -486,7 +488,7 @@ fieldset.vimer>div.output div.project fieldset.plug:not(.hide) { position:static
|
||||
fieldset.vimer>div.output div.project fieldset.plug>div.output { height:100%; }
|
||||
fieldset.vimer>div.output div.project fieldset.plug div.output.card>div.item { min-width:120px; width:calc(100% - 2*var(--input-margin)); }
|
||||
div.float { position:fixed; }
|
||||
div.output { position:relative; } div.content { position:relative; }
|
||||
div.output { position:relative; }
|
||||
div.output>div.code { position:sticky; left:0; }
|
||||
div.output>div.code>img { margin:5px; max-width:100%; }
|
||||
div.output.flex { overflow:hidden; align-items:flex-start; justify-content: flex-start; }
|
||||
@ -518,23 +520,21 @@ input[type=button] { border:var(--input-border); border-radius:var(--button-radi
|
||||
body:not(.mobile) input[type=button]:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
input[type=button].danger:hover { color:var(--danger-fg-color); }
|
||||
input[type=button].notice:hover { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
|
||||
// input[type=button].danger { color:var(--danger-bg-color) !important; }
|
||||
input[type=button].notice { border:var(--box-notice); }
|
||||
input[type=button].notice { border:var(--box-notice); color:var(--notice-bg-color); }
|
||||
input[type=button].danger { border:var(--box-danger); color:var(--danger-bg-color); }
|
||||
body:not(.mobile) table.content tr:hover { background-color:var(--tr-hover-bg-color); }
|
||||
table.content tr.select { background-color:var(--tr-hover-bg-color); }
|
||||
table.content tr.danger { background-color:var(--danger-bg-color); color:var(--danger-fg-color); }
|
||||
table.content tr.notice { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
|
||||
table.content tr.disable { color:var(--disable-fg-color); }
|
||||
table.content tr.offline { color:var(--disable-fg-color); }
|
||||
table.content tr.invalid { color:var(--disable-fg-color); }
|
||||
table.content tr.expired { color:var(--disable-fg-color); }
|
||||
table.content th { background-color:var(--th-bg-color); color:var(--th-fg-color); }
|
||||
body:not(.mobile) table.content td:hover { background-color:var(--td-hover-bg-color); color:var(--hover-fg-color); }
|
||||
body:not(.mobile) table.content tr:not(.action) td:hover { background-color:var(--td-hover-bg-color); color:var(--hover-fg-color); }
|
||||
table.content td.select { background-color:var(--td-hover-bg-color); color:var(--hover-fg-color); }
|
||||
table.content td i:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
table.content td.action { background-color:var(--th-bg-color); color:var(--th-fg-color); }
|
||||
table.content.checkbox td:first-child { background-color:var(--th-bg-color); }
|
||||
body:not(.mobile) table.content:hover td.option:not(:hover) { background-color:var(--tr-hover-bg-color); color:var(--hover-fg-color); }
|
||||
body:not(.mobile) table.content:not(.option):hover td.option:not(:hover) { background-color:var(--tr-hover-bg-color); color:var(--hover-fg-color); }
|
||||
hr, td.hr { border-bottom:var(--box-border); margin:var(--input-margin); }
|
||||
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); }
|
||||
@ -546,7 +546,7 @@ span.item.select { background-color:var(--hover-bg-color); color:var(--hover-fg-
|
||||
span.item:hover { 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); }
|
||||
body:not(.mobile):not(.pad) div.item:not(.text):hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
div.item.select:not(.button) { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
div.item.select:not(.button):not(:only-child) { background-color:var(--hover-bg-color); color:var(--hover-fg-color); }
|
||||
body:not(.mobile) div.item.button.danger input:hover[type=button] { background-color:var(--danger-bg-color); color:var(--danger-fg-color); }
|
||||
body:not(.mobile) div.item.button.notice input:hover[type=button] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
|
||||
div.item.button.danger input { border:var(--box-danger); color:var(--danger-bg-color); }
|
||||
@ -598,9 +598,10 @@ fieldset.input>span.close { line-height:16px; padding:var(--input-padding); posi
|
||||
fieldset.input>span.close:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); cursor:pointer; }
|
||||
div.float { background-color:var(--float-bg-color); }
|
||||
div.carte div.item:hover { background-color:var(--hover-bg-color); }
|
||||
div.carte div.item.notice:hover { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
|
||||
div.carte div.item.danger:hover { background-color:var(--danger-bg-color); color:var(--danger-fg-color); }
|
||||
div.carte div.item.notice:hover { background-color:var(--notice-bg-color) !important; color:var(--notice-fg-color) !important; }
|
||||
div.carte div.item.danger:hover { background-color:var(--danger-bg-color) !important; color:var(--danger-fg-color) !important; }
|
||||
/* z-index */
|
||||
table.content.action th:last-child { z-index:2; }
|
||||
table.content.action td:last-child { z-index:1; }
|
||||
table.content.checkbox td:first-child { z-index:1; }
|
||||
table.content.checkbox th:first-child { z-index:2; }
|
||||
@ -625,6 +626,7 @@ body.light fieldset.plugin>legend { box-shadow:var(--legend-box-shadow); margin-
|
||||
body.light fieldset.story>legend { box-shadow:var(--legend-box-shadow); margin-right:var(--legend-margin); }
|
||||
body.light fieldset.vimer fieldset.story>legend { margin-right:var(--input-margin); padding:0 var(--input-padding); }
|
||||
fieldset.story>legend { border-top-left-radius:var(--plugin-radius); }
|
||||
fieldset.story.float>legend { padding:0 10px; }
|
||||
fieldset>form.option div.item:not(.icon) { box-shadow:var(--input-box-shadow); }
|
||||
fieldset>form.option div.item.select { border-radius:var(--button-radius); }
|
||||
fieldset>form.option div.item.button { border-radius:var(--button-radius); }
|
||||
@ -647,7 +649,7 @@ fieldset.input.key table.content th { box-shadow:none; }
|
||||
fieldset.input.key table.content.checkbox td:first-child { box-shadow:none; }
|
||||
table.content.checkbox td:first-child { box-shadow:var(--th-box-shadow); }
|
||||
table.content.action td:last-child { box-shadow:var(--th-box-shadow); }
|
||||
table.content.detail tr.action td { box-shadow:var(--th-box-shadow); }
|
||||
table.content.detail tr.action td { box-shadow:var(--th-box-shadow); position:sticky; bottom:2px; }
|
||||
div.project:not(.toggle) { border-right:var(--box-border); overflow-x:hidden; }
|
||||
div.layout>div.profile:not(.toggle) { border-left:var(--box-border); }
|
||||
div.layout>div.display:not(.toggle) { border-top:var(--box-border); }
|
||||
@ -661,7 +663,6 @@ body { font-family:var(--body-font-family); }
|
||||
legend { font-family:var(--legend-font-family); font-style:italic; }
|
||||
input { font-family:var(--input-font-family); }
|
||||
kbd { font-family:var(--code-font-family); line-height:var(--code-line-height); }
|
||||
// kbd:hover { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
|
||||
table.content { font-family:var(--table-font-family); }
|
||||
table.content th { font-family:var(--input-font-family); font-style:italic; }
|
||||
body div.output>div.code { font-family:var(--table-font-family); padding:var(--table-padding); }
|
||||
@ -683,12 +684,12 @@ table.content col.action { width:var(--project); }
|
||||
table.content.detail td:first-child { width:var(--input-width); box-shadow:var(--th-box-shadow); }
|
||||
body.mobile table.content.detail td:first-child { max-width:150px; word-break:break-all; white-space:break-spaces; }
|
||||
table.content.detail td { min-width:90px; }
|
||||
table.content.detail tr.option td { top:34px; z-index:2; }
|
||||
fieldset.web.chat.island.portal>div.output>table.content.detail td { min-width:80px; text-align:center; }
|
||||
body.void fieldset.web.chat.island.portal>div.status { display:none; }
|
||||
table.content, div.code, div.story[data-type=spark] { white-space:pre; margin:0; }
|
||||
div.output>div.code video { max-width:100%; }
|
||||
div.story[data-type=spark] { border-left:var(--box-notice3); padding:var(--input-padding) var(--table-padding); }
|
||||
div.story[data-type=spark][data-name=shell] { box-shadow:var(--plugin-box-shadow); }
|
||||
fieldset.inner.result>div.output { border-left:var(--box-danger3); }
|
||||
iframe { height:var(--iframe-height); width:100%; }
|
||||
fieldset>form.option>div.item.text.cmd { width:100%; }
|
||||
@ -733,13 +734,12 @@ body.windows form.option>div.item.icon.refresh { font-size:24px; line-height:28p
|
||||
body.windows form.option>div.item.icon.goback { font-size:24px; line-height:28px; }
|
||||
body.windows div.item.button.refresh>span.icon { font-size:22px; line-height:28px; }
|
||||
body.windows div.item.button.create>span.icon { line-height:28px; }
|
||||
div.item.text { position:relative; display:flex; align-items:center; }
|
||||
div.item.text { position:relative; align-items:center; }
|
||||
div.item.text.filter input { padding-left:24px; }
|
||||
div.item.text._icon input { padding-left:24px; }
|
||||
div.item.select._icon i:first-child { color:var(--disable-fg-color); position:absolute; left:0; padding:var(--input-padding); }
|
||||
div.item.select._icon:hover i:first-child { color:unset; }
|
||||
div.item.text>input { width:var(--input-width); height:var(--action-height); }
|
||||
fieldset.story>form.option>div.item.text>input { max-width:100px; }
|
||||
div.item.text.id>input { width:80px; }
|
||||
div.item.text.url>input { width:var(--river-width); }
|
||||
div.item.text.port>input { width:80px; }
|
||||
@ -747,12 +747,14 @@ div.item.text.line>input { width:80px; }
|
||||
body:not(.mobile) div.item.text.hash>input { width:320px; }
|
||||
div.item.text.limit>input { width:var(--button-width); }
|
||||
div.item.text.offend>input { width:var(--button-width); }
|
||||
body:not(.width2):not(.mobile) fieldset.plugin.vimer>form.option>div.item.text.path>input { width:var(--input-width); }
|
||||
body:not(.width2):not(.mobile) fieldset.plugin.vimer>form.option>div.item.text.file>input { width:var(--project-width); }
|
||||
body:not(.width2):not(.mobile) fieldset.plugin>form.option>div.item.text.path>input { width:var(--project-width); }
|
||||
body:not(.width2):not(.mobile) fieldset.plugin.feel>form.option>div.item.text.file>input { width:var(--project-width); }
|
||||
body:not(.width2) fieldset>div.action>div.item.text.filter>input { width:var(--input-width); height:30px; transition:all 1.2s; }
|
||||
body:not(.width2) fieldset>div.action>div.item.text.filter>input:focus { width:var(--project-width); transition:all 0.5s; }
|
||||
div.item.text.will>input { border:var(--box-notice); }
|
||||
div.item.text>i:first-child { color:var(--disable-fg-color); position:absolute; left:0; padding:var(--input-padding); }
|
||||
div.item.text>i:first-child { color:var(--disable-fg-color); line-height:22px; padding:var(--input-padding); position:absolute; left:0; }
|
||||
body:mobile(.mobile) div.item.text:hover>i:first-child { color:unset; }
|
||||
div.item.text>span.icon { font-size:var(--icon-font-size); padding:var(--input-padding); position:absolute; right:0; visibility:hidden; }
|
||||
body:not(.mobile) div.item.text:hover>span.icon { visibility:visible; }
|
||||
@ -869,7 +871,7 @@ body.mobile fieldset.Search>div.action>div.item.filter>span { position:absolute;
|
||||
body.mobile fieldset.Search>div.action>div.item.filter { width:100%; position:relative; }
|
||||
body.mobile fieldset.River { position:fixed; top:var(--header-height); z-index:11; }
|
||||
body.mobile fieldset.River>div.output { font-size:1.4rem; min-width:var(--project-width); }
|
||||
body.mobile:not(.cmd) fieldset.Action { margin-top:var(--header-height); }
|
||||
html:not(.login) body.mobile:not(.cmd) fieldset.Action { margin-top:var(--header-height); }
|
||||
body.mobile fieldset.Action.cmd { margin-top:0; }
|
||||
body.mobile fieldset.Action { overflow:hidden; }
|
||||
body.mobile fieldset.Action>div.output { overflow-x:hidden; }
|
||||
@ -886,7 +888,6 @@ body.mobile.landscape fieldset.Action { margin-top:0; }
|
||||
body.mobile.landscape>div.input.login { padding:0; }
|
||||
body.mobile.landscape>div.input.login>div.output { height:290px; }
|
||||
body.mobile.landscape>div.input.login>div.output img { max-height:280px; }
|
||||
html.login body.mobile>fieldset.panel.Action>div.output { background-color:var(--panel-bg-color); }
|
||||
/* print */
|
||||
body.print { -webkit-filter: grayscale(100%); }
|
||||
body.print { background-color:white; color:black; }
|
||||
@ -908,12 +909,18 @@ body.print fieldset.draw div.output { background-color:lightgray; }
|
||||
body.print fieldset.draw div.output div.content svg { background-color:lightgray; }
|
||||
/* misc */
|
||||
fieldset.iframe>form.option>div.item.hash input { width:var(--form-width); }
|
||||
fieldset.iframe.float>form.option>div.item:not(.delete) { display:none; }
|
||||
fieldset.iframe.float>form.option>div.item:not(.delete):not(.refresh):not(.back) { display:none; }
|
||||
fieldset.iframe.float>form.option>div.item.hash input { width:var(--form-width); }
|
||||
fieldset.iframe>div.status { display:none; }
|
||||
fieldset.iframe.float { border:0; }
|
||||
fieldset.iframe.float { background-color:var(--panel-bg-color); color:var(--panel-fg-color); }
|
||||
fieldset.iframe.float>legend { background-color:var(--panel-bg-color); color:var(--panel-fg-color); }
|
||||
fieldset.iframe.float.portal { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
|
||||
fieldset.iframe.float.portal>legend { background-color:var(--notice-bg-color); color:var(--notice-fg-color); margin-right:10px; }
|
||||
fieldset.iframe.float.portal>div.action>div.item.full { display:none; }
|
||||
fieldset.iframe.float.portal>form.option>div.item.icon.goback { display:none; }
|
||||
fieldset.desktop { border:0; }
|
||||
fieldset.desktop>legend { background-color:transparent; color:silver; }
|
||||
fieldset.desktop>legend:not(:hover) { background-color:transparent; color:white; }
|
||||
fieldset.desktop>form.option>div.item:not(.delete) { display:none; }
|
||||
fieldset.desktop>form.option>div.item.delete { color:silver; }
|
||||
fieldset.desktop>div.action>div.item.text { display:none; }
|
||||
@ -922,6 +929,7 @@ fieldset.desktop>div.status { display:none; }
|
||||
fieldset.qrcode>div.output div.code { padding:0; }
|
||||
fieldset.xterm>div.output>div.project { font-family:var(--code-font-family); }
|
||||
fieldset.xterm>div.output>div.project div.item.offline { color:var(--disable-fg-color); }
|
||||
fieldset.xterm.output { background-color:var(--output-bg-color); }
|
||||
fieldset.xterm.float>div.status { display:none; }
|
||||
fieldset.xterm.float>form.option>div.item.text { display:none; }
|
||||
fieldset.full { position:fixed; bottom:unset; }
|
||||
@ -941,7 +949,7 @@ fieldset.plug.dream.zone>div.output>div.item { display:flex; padding:var(--input
|
||||
fieldset.plug.dream.zone>div.output>div.item>img { margin-right:var(--input-margin); }
|
||||
fieldset.plug.dream.zone>div.output>div.item>span { line-height:var(--action-height); }
|
||||
fieldset.plug.dream.zone>div.output>div.item.origin.select { border-right:var(--box-danger3); }
|
||||
fieldset.web.stats>div.output { align-items: normal; }
|
||||
fieldset.web.stats>div.output { align-items:normal; }
|
||||
fieldset.web.code.git>div.output>fieldset.web.code.inner>div.output { overflow:auto; }
|
||||
fieldset.web.code.git.total.draw div.output { text-align:center; }
|
||||
fieldset.web.code.git.trend>div.output rect { cursor:pointer; }
|
||||
@ -960,6 +968,7 @@ fieldset.web.chat.location>div.output>div.layout>div.layout { position:relative;
|
||||
fieldset.web.chat.location>div.output .amap-toolbar { z-index:unset; }
|
||||
fieldset.web.chat.location>div.output .amap-controls { z-index:unset; }
|
||||
fieldset.web.chat.location>div.output .amap-maptypecontrol { z-index:unset; }
|
||||
fieldset.web.code.compose.insight>div.output { max-height:unset !important; height:unset !important; overflow:hidden; }
|
||||
fieldset.web.chat.location>div.output>div.layout>div.layout>div.profile { background-color:var(--plugin-bg-color); position:absolute; right:0; width:360px; z-index:2; border-left:none; }
|
||||
fieldset.web.chat.color table.content { border-collapse:collapse; }
|
||||
fieldset.web.mall.region>div.output>table.content td:nth-child(3) { text-align:right; }
|
||||
@ -972,6 +981,7 @@ fieldset.offer>div.output>table.content tr.invite { background-color:var(--notic
|
||||
fieldset.apply>div.output>table.content.detail.apply tr.action td.action { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
|
||||
fieldset.trans>div.output>fieldset { margin:var(--button-margin); }
|
||||
fieldset.config form.option input[name=key] { width:var(--project-width); }
|
||||
body.dark fieldset.spides>div.output>svg>text:hover { fill:white; }
|
||||
fieldset.rich>div.output>table.content { font-family:var(--code-font-family); }
|
||||
fieldset.plan div.output div.content>table.content { height:100%; width:100%; }
|
||||
fieldset.plan>div.output>div.layout>div.layout>div.profile:not(.toggle) { width:unset; flex:unset; }
|
||||
@ -981,12 +991,12 @@ fieldset.plan>div.output>div.layout>div.layout { align-items:flex-start; }
|
||||
fieldset.plan>div.output>div.layout { height:100%; }
|
||||
fieldset.draw>form.option>div.item.pid>input { width:var(--button-width) !important; }
|
||||
fieldset.draw>div.output>div.layout>div.layout>div.profile table { width:100%; }
|
||||
fieldset.draw>div.output>div.layout>div.layout>div.profile { width:var(--project-width); flex:0 0 var(--project-width); }
|
||||
fieldset.draw>div.output>div.layout>div.layout>div.profile { width:var(--project-width); flex:0 0 var(--project-width); flex-grow:1; }
|
||||
fieldset.draw>div.output>svg { margin-bottom:-5px; }
|
||||
fieldset.draw>div.output>svg { min-height:100%; }
|
||||
body.dark fieldset.float { background-color:#000c; }
|
||||
body.dark fieldset.float:not(.iframe) { background-color:#000c; }
|
||||
body.dark fieldset.float>div.output { background-color:transparent; }
|
||||
body.light fieldset.float { background-color:#fffc; }
|
||||
body.light fieldset.float:not(.iframe) { background-color:#fffc; }
|
||||
body.light fieldset.float>div.output { background-color:transparent; }
|
||||
fieldset.draw.spides>div.output>svg text { cursor:pointer; }
|
||||
fieldset.draw.spides>div.output>svg path { stroke-width:1; }
|
||||
@ -1036,7 +1046,7 @@ fieldset.Action>div.output>fieldset.ssh.cloud.profile:hover { box-shadow:none; }
|
||||
fieldset.Action>div.output>fieldset.ssh.cloud.profile>div.output { background-color:transparent; }
|
||||
fieldset.Action:not(.horizon):not(.grid)>fieldset.plugin>form.option>div.item.text.path>input { width:var(--project-width); }
|
||||
body:not(.debug) fieldset.plugin.can._notfound { display:none; }
|
||||
body:not(.cmd) fieldset.Action>div.output>fieldset.plugin>legend { border-top:var(--box-notice3); border-top-left-radius:0; margin-right:var(--legend-margin); }
|
||||
body:not(.cmd) fieldset.Action>div.output>fieldset.plugin>legend { border-left:var(--box-notice3); border-top-left-radius:0; margin-right:var(--legend-margin); }
|
||||
body:not(.cmd) fieldset.Action>div.output>fieldset.plugin>legend:not(:hover) { background-color:var(--output-bg-color); }
|
||||
body:not(.dark) fieldset.draw.trends div.output svg { background-color:#1b5b738c; }
|
||||
body.width6 fieldset.plugin.word>form.option>div.item.text>input { width:var(--project-width); }
|
||||
|
@ -170,8 +170,9 @@ Volcanos("base", {
|
||||
if (arg.length > 2) { for (var i = 1; i < arg.length; i++) { str = callee(str, arg[i]) } return str }
|
||||
if (str.indexOf(pre) == -1) { return str } return str.slice(pre.length)
|
||||
},
|
||||
trimSuffix: function(str, end) { while (str) { var index = str.lastIndexOf(end)
|
||||
trimSuffix: function(str, end, once) { while (str) { var index = str.lastIndexOf(end)
|
||||
if (index == -1 || index+end.length != str.length) { break } str = str.slice(0, index)
|
||||
if (once) { break }
|
||||
} return str },
|
||||
trim: function(arg) { if (this.isString(arg)) { return arg.trim() }
|
||||
if (this.isArray(arg)) { for (var i = arg.length-1; i >= 0; i--) { if (!arg[i]) { arg.pop() } else { break } } } return arg
|
||||
|
@ -23,7 +23,7 @@ Volcanos("core", {
|
||||
}
|
||||
}
|
||||
}
|
||||
var node = data, keys = key.split(nfs.PT); while (node && keys.length > 0) {
|
||||
var node = data, keys = key.split(nfs.PT); while (node && keys.length > 0) { if (typeof node == "string") { return }
|
||||
if (keys[0] == "-1") { keys[0] = node.length-1 } node = node[keys[0]], keys = keys.slice(1)
|
||||
} return node == undefined? data[key]: node
|
||||
},
|
||||
|
20
lib/misc.js
20
lib/misc.js
@ -116,8 +116,9 @@ Volcanos("misc", {
|
||||
}); return msg
|
||||
},
|
||||
Echo: function(res) { msg.result = (msg.result||[]).concat(can.core.List(arguments)); return msg._hand = true, msg },
|
||||
Dump: function(can) { can = can||msg._can; if (can.user.isNodejs) { return }
|
||||
can.onmotion.clear(can), can.onappend.table(can, msg), can.onappend.board(can, msg), can.onmotion.story.auto(can)
|
||||
Dump: function(can, target) { can = can||msg._can; if (can.user.isNodejs) { return }
|
||||
target = target||can._output
|
||||
can.onmotion.clear(can, target), can.onappend.table(can, msg, null, target), can.onappend.board(can, msg, target), can.onmotion.story.auto(can)
|
||||
},
|
||||
Show: function(can) { can = can||msg._can; if (can.user.isNodejs) { return }
|
||||
can.onmotion.clear(can), can.onappend.table(can, msg), can.onappend.board(can, msg), can.onmotion.story.auto(can)
|
||||
@ -129,11 +130,8 @@ Volcanos("misc", {
|
||||
_caller: function(skip) { msg.Option("log.caller") || msg.Option("log.caller", can.misc.fileLine((skip||2)+3).link); return msg },
|
||||
isDebug: function() { return msg.Option(log.DEBUG) == ice.TRUE },
|
||||
}); return msg },
|
||||
Inputs: function(can, msg, cmds, cb, meta) {
|
||||
var event = msg._event
|
||||
if (msg.Option(ice.MSG_HANDLE) != ice.TRUE && cmds && cmds[0] == ctx.ACTION && meta.feature[cmds[1]]) {
|
||||
// var msg = can.request(event, {action: cmds[1]})
|
||||
msg.Option(ctx.ACTION, cmds[1])
|
||||
Inputs: function(can, msg, cmds, cb, meta) { var event = msg._event
|
||||
if (msg.Option(ice.MSG_HANDLE) != ice.TRUE && cmds && cmds[0] == ctx.ACTION && meta.feature[cmds[1]]) { msg.Option(ctx.ACTION, cmds[1])
|
||||
var action = meta.feature[cmds[1]]; if (can.base.isFunc(action)) { cb = cb||function() { can.Update() }
|
||||
return action.list && action.list.length > 0? can.user.input(event, can, action.list, function(data) {
|
||||
can.core.CallFunc(action, {can: can, msg: can.request(event, data), arg: cmds.slice(2), cb: cb})
|
||||
@ -143,11 +141,9 @@ Volcanos("misc", {
|
||||
can.onmotion.delay(can, function() { can.page.ClassList.add(can, input._target, html.PROCESS) })
|
||||
can.Update(can.request(event, can.Option(), {_handle: ice.TRUE, _cancel: function(event) {
|
||||
can.page.ClassList.del(can, input._target, html.PROCESS)
|
||||
}}, msg), cmds.slice(0, 2).concat(args), function(msg) {
|
||||
can.page.ClassList.del(can, input._target, html.PROCESS)
|
||||
if (msg.IsErr()) {
|
||||
}}, msg), cmds.slice(0, 2).concat(args), function(msg) { can.page.ClassList.del(can, input._target, html.PROCESS)
|
||||
if (msg.IsErr()) { input.focus()
|
||||
can.onappend.style(can, "warn", can.user.toastFailure(can, msg.Result())._target)
|
||||
input.focus()
|
||||
} else {
|
||||
if (cb && cb(msg)) { return }
|
||||
input.cancel({}, can)
|
||||
@ -257,7 +253,7 @@ Volcanos("misc", {
|
||||
Resource: function(can, path, space, serve) { if (!path) { return "" }
|
||||
if (!can.base.beginWith(path, web.HTTP, nfs.PS)) { path = nfs.P+path+(path.indexOf("usr/icons/") == -1? (space? can.core.Split(_version, "&")[0]: _version): "") }
|
||||
if (!can.base.beginWith(path, web.HTTP)) { if (serve && serve.indexOf(location.origin) == -1) { var u = can.base.ParseURL(serve); path = u.origin + path } }
|
||||
if (!space && can.base.beginWith(path, web.HTTP)) { return path }
|
||||
if (!space && !can.base.beginWith(path, web.HTTP)) { return location.origin+path }
|
||||
if (!space && path.indexOf("pod=") > 0) { return path }
|
||||
if (can.base.beginWith(path, "/") && path.indexOf("pod=") > 0) { return path }
|
||||
return can.base.MergeURL(path, ice.POD, space||can.ConfSpace()||can.misc.Search(can, ice.POD))
|
||||
|
@ -198,8 +198,9 @@ Volcanos("page", {
|
||||
if (value == undefined) { return {view: [key, "col"]} } return {view: [[key, "option"], "col"]}
|
||||
} }) }, {type: html.THEAD}, {type: html.TBODY},
|
||||
]}])
|
||||
var option = can.core.Item(can.Option())
|
||||
can.page.Append(can, ui.thead, [{type: html.TR, data: {dataset: {index: -1}}, list: can.core.List(list, function(key) {
|
||||
if (key[0] != "_") { return {type: html.TH, list: [{text: can.user.trans(can, key, null, html.INPUT)}, {icon: "bi bi-sort-down-alt"}, {icon: "bi bi-sort-up"}]} }
|
||||
if (key[0] != "_") { return {className: option.indexOf(key) > -1? ice.MSG_OPTION: key == ctx.ACTION? ctx.ACTION: "", type: html.TH, list: [{text: can.user.trans(can, key, null, html.INPUT)}, {icon: "bi bi-sort-down-alt"}, {icon: "bi bi-sort-up"}]} }
|
||||
}) }])
|
||||
can.page.Append(can, ui.tbody, can.core.List(msg.Table(), function(item, index, array) {
|
||||
return {dataset: {index: index}, className: item[mdb.STATUS], td: can.core.List(list, function(key) { if (key[0] != "_") { return cb(can.page.Color(item[key]).trim(), key, index, item, array) } }) }
|
||||
@ -495,7 +496,7 @@ Volcanos("page", {
|
||||
},
|
||||
appendAction: function(can, value, target) { if (!value.action) { return } target.innerHTML = value.action
|
||||
can.page.Select(can, target, html.INPUT_BUTTON, function(target) {
|
||||
var style = can.Conf("_style."+target.name)||can.page.buttonStyle(can, target.name); style && can.onappend.style(can, style, target)
|
||||
var style = can.Conf(["_trans.input",can.ConfIndex().split(".").pop(), "style", target.name])||can.Conf("_style."+target.name)||can.page.buttonStyle(can, target.name); style && can.onappend.style(can, style, target)
|
||||
target.onclick = function(event) {
|
||||
if (can.page.ClassList.has(can, can._fields, "_process")) { return } can.onappend.style(can, "_process")
|
||||
can.onkeymap.prevent(event), can.Update(can.request(event, value, {_toast: can.user.trans(can, target.name)}), [ctx.ACTION, target.name])
|
||||
@ -509,7 +510,8 @@ Volcanos("page", {
|
||||
return action
|
||||
},
|
||||
buttonStyle: function(can, name) {
|
||||
return can.Conf("_style."+name)||can.core.Value(can.onaction, ["_trans", "style", name])||(can.base.isIn(name, mdb.CREATE, mdb.INSERT, mdb.IMPORT, nfs.CLONE, cli.START, ctx.RUN, web.UPLOAD, web.CONFIRM, aaa.LOGIN, code.AUTOGEN, "sso", "add", "pull", "push", "submit", "commit", "preview", "auto-preview", ice.APP)? html.NOTICE:
|
||||
return can.Conf(["_trans.input", can.ConfIndex().split(".").pop(), "style", name])||can.Conf("_style."+name)||
|
||||
can.core.Value(can.onaction, ["_trans", "style", name])||(can.base.isIn(name, mdb.CREATE, mdb.INSERT, mdb.IMPORT, nfs.CLONE, cli.START, ctx.RUN, web.UPLOAD, web.CONFIRM, aaa.LOGIN, code.AUTOGEN, "sso", "add", "pull", "push", "submit", "commit", "preview", "auto-preview", ice.APP)? html.NOTICE:
|
||||
can.base.isIn(name, mdb.REMOVE, "rename", mdb.DELETE, mdb.PRUNES, mdb.PRUNE, nfs.TRASH, cli.RESTART, cli.STOP, cli.CLOSE, cli.REBOOT, web.CANCEL, code.UPGRADE, "reject", "del", "drop", "access", "kill", "prockill")? html.DANGER: "")
|
||||
},
|
||||
exportValue: function(can, msg, target) { target = target||can._output
|
||||
|
89
lib/user.js
89
lib/user.js
@ -45,7 +45,9 @@ Volcanos("user", {
|
||||
confirm: function(text) { return confirm(JSON.stringify(text)) },
|
||||
prompt: function(tip, def, cb, silent) { (text = silent? def: prompt(tip, def||"")) != undefined && typeof cb == code.FUNCTION && cb(text); return text },
|
||||
reload: function(force) { (force || confirm("重新加载页面?")) && location.reload() },
|
||||
jumps: function(url) { location.href = url },
|
||||
jumps: function(url) {
|
||||
location.href = url
|
||||
},
|
||||
opens: function(url) {
|
||||
if (window.parent && window.parent.openurl) { return window.parent.openurl(url) }
|
||||
window.openurl? window.openurl(url): this.open(url)
|
||||
@ -59,18 +61,21 @@ Volcanos("user", {
|
||||
close: function(url) { return window.close() },
|
||||
theme: function(can, name) { can.base.isString(name) && (name = [name]) || name || []
|
||||
name.push(html.WIDTH+parseInt((can.page.width()+32)/320))
|
||||
can.misc.isDebug(can) && name.push(log.DEBUG)
|
||||
can.user.info.userrole && name.push(can.user.info.userrole)
|
||||
can.user.language(can) && name.push(can.core.Split(can.user.language(can), "-_.")[0])
|
||||
can.user.mod.isCmd && name.push(chat.CMD), can.user.mod.cmd && name.push(can.user.mod.cmd.replaceAll(".", " "))
|
||||
can.user.isWeiXin && name.push("weixin")
|
||||
if (window.innerWidth <= 1080) { can.user.isIPad = true }
|
||||
can.user.mod.isCmd && name.push(chat.CMD), can.user.mod.cmd && name.push(can.base.replaceAll(can.user.mod.cmd, ".", " "))
|
||||
// if (window.innerWidth <= 1080) { can.user.isIPad = true }
|
||||
can.user.isIPad && name.push("pad") && can.user.isLandscape() && name.push(html.LANDSCAPE)
|
||||
can.user.isMobile && name.push(html.MOBILE) && can.user.isLandscape() && name.push(html.LANDSCAPE)
|
||||
can.user.isWindows && name.push(html.WINDOWS), can.user.isWebview && name.push(html.WEBVIEW)
|
||||
can.user.isMobile && name.push(html.MOBILE) && can.user.isLandscape() && name.push(html.LANDSCAPE)
|
||||
can.user.isWeiXin && name.push("weixin")
|
||||
can.user.language(can) && name.push(can.core.Split(can.user.language(can), "-_.")[0])
|
||||
can.user.info.userrole && name.push(can.user.info.userrole)
|
||||
can.misc.isDebug(can) && name.push(log.DEBUG)
|
||||
can.page.styleClass(can, document.body, name.join(lex.SP))
|
||||
},
|
||||
title: function(text) { if (window.webview) { return title(text) } return text && (document.title = text), document.title },
|
||||
title: function(text) {
|
||||
if (window.webview) { return title(text) }
|
||||
return text && (document.title = text), document.title
|
||||
},
|
||||
language: function(can) { return (can.misc.SearchOrConf(can, aaa.LANGUAGE)||can.user.info.language||"") },
|
||||
isEnglish: function(can) { return can.base.isIn(can.core.Split(can.user.language(can).toLowerCase()||"en", "_-.")[0], "en", "en-us") },
|
||||
transValue: function(can, value, key) {
|
||||
@ -83,7 +88,12 @@ Volcanos("user", {
|
||||
if (can.base.isFunc(text)) { text = text.name||"" } if (list && can.base.isString(list)) { return list }
|
||||
var key = can.core.Keys(zone, text)
|
||||
if (text == can.Conf("index") && can.Conf("help")) { return can.Conf("help") }
|
||||
return can.core.Value(list, key) || can.core.Value(can._trans, key) || can.Conf(["trans", key]) || can.Conf(["feature._trans", key]) || can.core.Value(can.user._trans, key) || text
|
||||
return can.core.Value(list, key) ||
|
||||
can.Conf(["feature._trans", zone||"input", (can.ConfIndex()||"").split(".").pop(), text]) ||
|
||||
can.Conf(["feature._trans", zone, (can.ConfIndex()||"").split(".").pop(), text]) ||
|
||||
can.Conf(["feature._trans", key]) || can.Conf(["trans", key]) ||
|
||||
can.core.Value(can._trans, key) ||
|
||||
can.core.Value(can.user._trans, key) || text
|
||||
}, _trans: {"_week_header": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]},
|
||||
time: function(can, time, fmt) {
|
||||
var now = can.base.Date(time), list = can.user._trans["_week_header"]
|
||||
@ -99,7 +109,8 @@ Volcanos("user", {
|
||||
return can.user.toast(can, {content: "🕑 "+content, title: title, duration: -1, progress: progress})
|
||||
},
|
||||
toastFailure: function(can, content, title) {
|
||||
content = can.user.trans(can, content||""), content += can.user.trans(can, " failure", "失败")
|
||||
content = can.user.trans(can, content||"")
|
||||
if (content.length < 8) { content += can.user.trans(can, " failure", "失败") }
|
||||
return can.user.toast(can, {content: "❌ "+content, title: title, duration: -1})
|
||||
},
|
||||
toastSuccess: function(can, content, title, duration) {
|
||||
@ -262,15 +273,28 @@ Volcanos("user", {
|
||||
], onclick: function(event) { if (!can.page.tagis(event.target, html.INPUT, html.TEXTAREA)) { can.onmotion.clearCarte(can) } }}])
|
||||
var action = can.onappend._action(can, button||[html.SUBMIT, html.CANCEL], ui.action, {
|
||||
_trans: {submit: msg.Option(web.SUBMIT)},
|
||||
focus: function() { can.onmotion.focus(can, can.page.Select(can, ui._target, html.INPUT_ARGS)[0]) },
|
||||
focus: function(key) { can.onmotion.focus(can, can.page.Select(can, ui._target, key? "input.args[name="+key+"]": html.INPUT_ARGS)[0]) },
|
||||
Option: function(key, value, hidden) {
|
||||
if (!key) { var data = kit.Dict(msg.OptionSimple())
|
||||
can.page.Select(can, ui._target, "input.args", function(target) { data[target.name] = target.value })
|
||||
return data
|
||||
}
|
||||
var target = can.page.Select(can, ui._target, "input.args[name="+key+"]")[0]
|
||||
if (!target) { return }
|
||||
if (value != undefined) { target.value = target.value||value }
|
||||
if (target.value && hidden) { can.onmotion.hidden(can, can.page.parentNode(can, target, html.TR)) }
|
||||
return target.value
|
||||
},
|
||||
layout: function(event) {
|
||||
if (event && event.target) { can.onlayout.figure(event, can, ui._target)
|
||||
can.user.isMobile && can.page.style(can, ui._target, html.LEFT, (can.page.width()-ui._target.offsetWidth)/2, html.TOP, 40)
|
||||
} else {
|
||||
can.getActionSize(function(left, top, height) { can.page.style(can, ui._target, html.LEFT, left||0, html.TOP, (height/4||0)) })
|
||||
} can.onmotion.resize(can, ui._target)
|
||||
|
||||
},
|
||||
cancel: function(event, can, button) {
|
||||
can.page.ClassList.del(can, can._fields||can._target, "_process")
|
||||
button == "cancel" && msg._cancel && msg._cancel(event), callback("afterInputs", button)
|
||||
can.onengine.signal(can, "onremove", can.request(event, {query: can.page.getquery(can, ui._target)})), can.page.Remove(can, ui._target)
|
||||
},
|
||||
@ -292,13 +316,10 @@ Volcanos("user", {
|
||||
var onclick = target.onclick; target.onclick = function(event) { can.onengine.signal(can, "onevent", can.request(event, {_type: target.name})), onclick && onclick(event) }
|
||||
})
|
||||
title && can.page.Select(can, action._target, "input[name=submit]", function(target) { target.value = can.user.trans(can, title) })
|
||||
if (event && event.target) { can.onlayout.figure(event, can, ui._target)
|
||||
can.user.isMobile && can.page.style(can, ui._target, html.LEFT, (can.page.width()-ui._target.offsetWidth)/2, html.TOP, 40)
|
||||
} else {
|
||||
can.getActionSize(function(left, top, height) { can.page.style(can, ui._target, html.LEFT, left||0, html.TOP, (height/4||0)) })
|
||||
} can.onmotion.resize(can, ui._target), can.onmotion.delay(can, function() { action.focus() }, 300)
|
||||
function callback(key, button) { var sub = can._fields? can: can.sub; sub.onaction && sub.onaction[key] && sub.onaction[key](event, sub, button, action) }
|
||||
action.layout(event), can.onmotion.delay(can, function() { action.focus() }, 300)
|
||||
function callback(key, button) { var sub = can._fields? can: can.sub; sub && sub.onaction && sub.onaction[key] && sub.onaction[key](event, sub, button, action) }
|
||||
callback("beforeInputs")
|
||||
// ui._target._layout = action.layout
|
||||
return button === true && action.submit(event, can, html.SUBMIT), action
|
||||
},
|
||||
select: function(event, can, type, fields, cb, cbs) {
|
||||
@ -316,7 +337,13 @@ Volcanos("user", {
|
||||
begin: function() { begin = new Date(), can.user.toastProcess(can, "upload")
|
||||
var upload = can.page.Select(can, ui.action, html.INPUT_FILE)[0]; if (upload.files.length == 0) { return upload.focus() }
|
||||
var msg = can.request(event, can.Option(), {_handle: ice.TRUE}); msg._upload = upload.files[0], msg._progress = action.show
|
||||
can.runAction(event, html.UPLOAD, [], function(msg) { can.base.isFunc(cb)? cb(msg): can.Update(), action.close(), can.user.toastSuccess(can, "upload") })
|
||||
can.runAction(event, html.UPLOAD, [], function(msg) {
|
||||
if (msg.IsErr()) {
|
||||
action.close(), can.user.toastFailure(can, msg.Result())
|
||||
return
|
||||
}
|
||||
can.base.isFunc(cb)? cb(msg): can.Update(), action.close(), can.user.toastSuccess(can, "upload")
|
||||
})
|
||||
}, close: function(event) { can.page.Remove(can, ui._target) },
|
||||
show: function (event, value, total, loaded) {
|
||||
ui.cost.innerHTML = can.base.Duration(new Date() - begin)
|
||||
@ -357,13 +384,17 @@ Volcanos("user", {
|
||||
if (cmd == ice.MSG_SESSID) {
|
||||
if (!can.misc.CookieSessid(can, arg[0])) { can.user.info.sessid = arg[0] } check()
|
||||
} else if (cmd == cli.PWD) { if (check() || ui) { return } can._wss_name = can.ondaemon._list[0] = arg[0]
|
||||
var hassso = false
|
||||
var _list = [], list = {}; _msg.Table(function(value) { if (!value.order) { return }
|
||||
can.user.trans(can, kit.Dict(value.name, value.help))
|
||||
if (value.type == "oauth") { hassso = true }
|
||||
if (value.type == cli.QRCODE) {
|
||||
_list.push(value.name), list[value.name] = function(target) { can.page.Modify(can, target, arg[2]) }
|
||||
_list.push(value.name), list[value.name] = function(target) {
|
||||
can.user.isWeiXin || can.page.Modify(can, target, arg[2])
|
||||
}
|
||||
} else if (value.type == mdb.PLUGIN) {
|
||||
_list.push(value.name), list[value.name] = function(target) {
|
||||
can.onappend.plugin(can, {space: value.space, index: value.index, args: can.core.Split(value.args), height: html.QRCODE_HEIGHT, width: 420, style: html.OUTPUT}, function(sub) {
|
||||
can.onappend.plugin(can, {space: value.space, index: value.index, args: can.core.Split(value.args), height: html.IFRAME_HEIGHT, width: html.IFRAME_HEIGHT, style: html.OUTPUT}, function(sub) {
|
||||
var run = sub.run; sub.run = function(event, cmds, cb) { var msg = can.request(event, {space: arg[0]}); can.page.exportValue(can, msg), run(event, cmds, cb) }
|
||||
}, ui.output)
|
||||
}
|
||||
@ -371,12 +402,13 @@ Volcanos("user", {
|
||||
})
|
||||
var _cmd = "space login "+arg[0]
|
||||
ui = can.onappend.tabview(can, list, _list, can.page.Append(can, document.body, [{view: "input login float flex"}])._target)
|
||||
can.user.title(can.user.info.titles)
|
||||
can.page.Append(can, ui._target, [{view: [[html.DISPLAY, html.FLEX]], list: [
|
||||
{text: [can.user.trans(can, "or command login", "或命令行授权: "), html.LABEL]},
|
||||
{text: ["$ "+_cmd, "", html.ITEM], title: "点击复制,并后台执行此命令,即可登录", style: {cursor: "copy"}, onclick: function() { can.user.copy(event, can, _cmd) }},
|
||||
{text: [can.user.trans(can, "or oauth login", "或第三方授权: "), html.LABEL]},
|
||||
{view: [["sso", html.FLEX]], list: _msg.Table(function(value) {
|
||||
return value.type == "oauth" && {view: [[html.ITEM, html.FLEX]], title: value.link, list: [
|
||||
hassso && {text: [can.user.trans(can, "or oauth login", "或第三方授权: "), html.LABEL]},
|
||||
hassso && {view: [["sso", html.FLEX]], list: _msg.Table(function(value) {
|
||||
return value.type == "oauth" && {view: [[html.ITEM, value.name, html.FLEX]], title: value.link, list: [
|
||||
{img: can.misc.Resource(can, value.icons)}, {text: can.user.trans(can, value.name, value.help)},
|
||||
], onclick: function() {
|
||||
can.user.jumps(can.base.MergeURL(value.link, ice.BACK, location.href))
|
||||
@ -386,19 +418,24 @@ Volcanos("user", {
|
||||
}
|
||||
}}
|
||||
}) },
|
||||
// {text: [can.user.info.titles]},
|
||||
]}]), window.parent != window && window.innerHeight < 480 && can.onmotion.hidden(can, ui.output)
|
||||
can.page.style(can, ui._target, {left: (can.page.width()-ui._target.offsetWidth)/2, top: can.page.height() < 640? (can.page.height()-ui._target.offsetHeight)/2: (can.page.height()-ui._target.offsetHeight-html.HEADER_HEIGHT-html.ACTION_HEIGHT)/4+html.HEADER_HEIGHT})
|
||||
can.page.style(can, ui._target, {
|
||||
left: (can.page.width()-ui._target.offsetWidth)/2,
|
||||
top: can.user.isMobile? 20: can.page.height() < 480? (can.page.height()-ui._target.offsetHeight)/2: (can.page.height()-can.base.Min(ui._target.offsetHeight, html.IFRAME_HEIGHT)-html.HEADER_HEIGHT-html.ACTION_HEIGHT)/4+html.HEADER_HEIGHT,
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
logout: function(can) { can.user.toastConfirm(can, aaa.LOGOUT, "", function() { can.runAction({}, aaa.LOGOUT, [], function(msg) {
|
||||
can.misc.Cookie(can, "user_uid", "")
|
||||
can.misc.CookieSessid(can, ""), can.misc.Search(can, chat.SHARE)? can.misc.Search(can, chat.SHARE, ""): can.user.reload(true)
|
||||
}) }) },
|
||||
header: function(can) { if (!can._root) { return } var header = can._root.Header
|
||||
var meta = {
|
||||
time: !can.user.isMobile && {view: [[html.ITEM, "state", mdb.TIME, html.FLEX]], _init: function(target) {
|
||||
can.onappend.figure(can, {action: "date", _hold: true}, target, function(sub, value) {})
|
||||
can.core.Timer({interval: 100}, function() { can.page.Modify(can, target, can.user.time(can, null, "%H:%M:%S %w")) })
|
||||
can.core.Timer({interval: 100}, function() { can.page.Modify(can, target, can.user.time(can, null, "%w %H:%M:%S")) })
|
||||
}},
|
||||
avatar: {view: [[html.ITEM, "state", aaa.AVATAR]], list: [{img: can.misc.Resource(can, can.user.info.avatar)}], onclick: function(event) { header && header.onaction.avatar(event, header) }},
|
||||
usernick: {view: [[html.ITEM, "state", aaa.USERNICK, html.FLEX], "", can.user.info.usernick], onclick: function(event) { header && header.onaction.usernick(event, header) }, _init: function(target) {
|
||||
|
@ -7,9 +7,10 @@ Volcanos(chat.ONIMPORT, {
|
||||
can.base.isIn(item.index, ssh.CLOUD_PROFILE) && (item.style = html.OUTPUT)
|
||||
if (list.length == 0) {
|
||||
can.user.info.nodetype == web.SERVER && item._command == web.DREAM && (list = [river, storm, item._command])
|
||||
can.user.info.nodetype == web.WORKER && item._command == web.WORD && (list = [river, storm, item._command])
|
||||
can.user.info.nodetype == web.WORKER && item._command == web.VIMER && (list = [river, storm, item._command])
|
||||
}
|
||||
can.onappend.plugin(can, item, function(sub, meta, skip) {
|
||||
can.user.isMobile || sub.Conf(ice.AUTO, cli.DELAY)
|
||||
if (msg.detail && can.base.isIn(meta.index, "can._notfound")) { sub.Conf(ctx.INDEX, msg.detail[index+3]) }
|
||||
sub.run = function(event, cmds, cb) { return can.run(can.request(event, {pod: meta.pod||meta.space}), (can.base.beginWith(meta.index, "can.")? [meta.index]: [river, storm, meta.id||meta.index]).concat(cmds), cb) }
|
||||
sub.onexport.output = function() { msg.Length() > 1 && can.onexport.isauto(can) && can.page.style(can, sub._output, html.HEIGHT, "", html.MAX_HEIGHT, ""), can.onaction.layout(can, list[3]) }
|
||||
@ -18,22 +19,22 @@ Volcanos(chat.ONIMPORT, {
|
||||
})
|
||||
}, function() { can.onaction.layout(can, list[3]), _select._tabs.click() })
|
||||
},
|
||||
_tabs: function(can, sub, meta) {
|
||||
var _init = true
|
||||
_tabs: function(can, sub, meta) { var _init = true
|
||||
var tabs = [{view: [[html.TABS, meta.name], "", can.user.trans(can, meta.name, meta.help)], title: meta.help, onclick: function(event) { can._current = sub
|
||||
can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, sub._target)
|
||||
can.onmotion.select(can, can._action, html.DIV_ITEM, sub._tabs)
|
||||
can.onmotion.select(can, can._header_tabs, html.DIV_TABS, sub._header_tabs)
|
||||
can.user.mod.isPod && can.user.title(["后台", sub.ConfHelp(), can.user.info.titles].join(" "))
|
||||
// can.onmotion.delay(can, function() { sub._header_tabs.scrollIntoViewIfNeeded() })
|
||||
var layout = can.onexport.layout(can); layout == FREE || (can._output.scrollTop = sub._target.offsetTop-10)
|
||||
can.isCmdMode() || can.misc.SearchHash(can, can.Conf(chat.RIVER), can.Conf(chat.STORM), sub.ConfIndex(), layout)
|
||||
sub.Conf(ice.AUTO) == cli.DELAY && sub._output.innerHTML == "" && sub.Update(event)
|
||||
sub.onimport.size(sub, can.ConfHeight()-can.Conf(html.MARGIN_Y), can.ConfWidth()-can.Conf(html.MARGIN_X), can.onexport.isauto(can))
|
||||
can.onengine.signal(can, "onindex", can.request(_init? {target: event.target, type: "click", isTrusted: true}: event, {index: sub.ConfIndex()})), _init = false
|
||||
// can.onengine.signal(can, "onevent", can.request(_init? {target: event.target, type: "click", isTrusted: true}: event)), _init = false
|
||||
}, 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 }
|
||||
if (!can.user.isTechOrRoot(can)) { return }
|
||||
_menu: function(can, msg) { if (can.user.isMobile) { return } if (!can.user.isTechOrRoot(can)) { return }
|
||||
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, ["_tabs"])._target)
|
||||
},
|
||||
|
@ -3,7 +3,7 @@ fieldset.Footer>div.output div.item { padding:7px; height:var(--footer-height);
|
||||
fieldset.Footer>div.output div.item.button { padding:7px 0; }
|
||||
fieldset.Footer>div.output div.title:first-child { margin-left:var(--header-height); white-space:pre; }
|
||||
fieldset.Footer:not(.tabview)>div.output div.title:first-child { font-weight:bold; text-align:center; width:var(--river-width); }
|
||||
fieldset.Footer>div.output input[type=button] { background-color:transparent; color:var(--panel-fg-color); border:0; }
|
||||
fieldset.Footer>div.output input[type=button] { background-color:transparent; color:var(--panel-fg-color); font-style:italic; border:0; }
|
||||
fieldset.Footer>div.output div.toast { font-family:var(--status-font-family); line-height:18px; text-align:right; overflow:auto; flex-grow:1; justify-content:flex-end; }
|
||||
fieldset.Footer>div.output div.state { font-family:var(--status-font-family); line-height:18px; white-space:pre; }
|
||||
fieldset.Footer>div.output div.state label { font-size:var(--status-font-size); }
|
||||
@ -32,6 +32,8 @@ div.item:not(.string):not(.number):not(.boolean)>span.value { color:var(--disabl
|
||||
span.item:not(.string):not(.number):not(.boolean)>span.value { color:var(--disable-fg-color); font-style:italic; }
|
||||
fieldset.debug div.output table.content * { font-size:14px; }
|
||||
fieldset.debug span.path { color:silver; font-style:italic; }
|
||||
html.login body.width1 fieldset.Footer { display:none; }
|
||||
html.login body.width1 fieldset.Header { display:none; }
|
||||
body.dark fieldset.debug span.path { color:gray; }
|
||||
body.dark fieldset.debug span.target { color:gray; }
|
||||
body.dark div.item:not(.string):not(.number):not(.boolean)>span.value { color:gray; }
|
||||
|
@ -10,9 +10,11 @@ Volcanos(chat.ONIMPORT, {
|
||||
can.onimport._title(can, msg, target)
|
||||
can.onimport._storm(can, msg, target)
|
||||
can.core.List([
|
||||
{index: chat.TUTOR},
|
||||
{index: chat.FLOWS, value: "流程"},
|
||||
{index: chat.MESSAGE},
|
||||
// {index: chat.TUTOR},
|
||||
// {index: chat.FLOWS, value: "流程"},
|
||||
// {index: chat.MESSAGE},
|
||||
{index: web.SPIDE, value: can.user.trans(can, "spide", "服务")},
|
||||
{index: web.SPACE, value: can.user.trans(can, "space", "空间")},
|
||||
{index: cli.RUNTIME},
|
||||
{index: code.XTERM, args: [cli.SH]},
|
||||
], function(value) { value.type = html.BUTTON, value.name = value.index
|
||||
|
@ -45,6 +45,6 @@ body.width2>fieldset.Header>div.output>div.item.avatar { margin-right:var(--plug
|
||||
body.width2>fieldset.Header>div.output>div.item.theme { display:none; }
|
||||
body.width2>fieldset.Header>div.output>div.item.time { display:none; }
|
||||
body.width2>fieldset.Header:not(.all):not(.tabs)>div.output div.item.title:first-child img { margin-right:0; }
|
||||
body.width2>fieldset.Header:not(.all):not(.tabs)>div.output div.item.title:first-child span { display:none; }
|
||||
// body.width2>fieldset.Header:not(.all):not(.tabs)>div.output div.item.title:first-child span { display:none; }
|
||||
body.width2>fieldset.Footer:not(.all):not(.tabs)>div.output div.item.cmd { display:none; }
|
||||
body.width2>fieldset.Footer:not(.all):not(.tabs)>div.output div.item.title { display:none; }
|
||||
|
@ -4,7 +4,10 @@ Volcanos(chat.ONIMPORT, {
|
||||
can.onimport._avatar(can, msg, target), can.onimport._background(can, msg, target)
|
||||
},
|
||||
_title: function(can, msg, target) {
|
||||
can.core.List(can.base.getValid(can.Conf(chat.TITLE)||msg.result, [can.user.title()||decodeURIComponent(can.misc.Search(can, ice.POD)||location.host),]), function(item) {
|
||||
can.core.List(can.base.getValid(can.Conf(chat.TITLE)||msg.result, [
|
||||
// can.user.title()||
|
||||
decodeURIComponent((window == top? can.user.info.titles: "")||can.misc.Search(can, ice.POD)||location.host)
|
||||
]), function(item) {
|
||||
can.page.Append(can, target, [{view: [[html.ITEM, chat.TITLE, html.FLEX]], list: [{img: can.misc.ResourceFavicon(can)}, {text: item}], title: "返回主页", onclick: function(event) { can.onaction.title(event, can) }}])
|
||||
})
|
||||
},
|
||||
@ -109,6 +112,7 @@ Volcanos(chat.ONACTION, {_init: function(can) {},
|
||||
can.user.isMobile && (msg["theme.list"] = ["dark.css", "light.css"])
|
||||
can.onaction._menus[2] = [chat.THEME, ice.AUTO].concat(can.core.List(msg["theme.list"], function(item) { return can.base.trimSuffix(item, nfs._CSS) }))
|
||||
can.require(can.core.List(msg["theme.list"], function(item) { return nfs.SRC_TEMPLATE+web.CHAT_HEADER+"/theme/"+item }), function() {
|
||||
can.user.info.titles = msg.Option("titles")||document.title
|
||||
if (can.base.beginWith(location.pathname, nfs.WIKI_PORTAL, web.CHAT_CMD+web.WIKI_PORTAL, web.CHAT_CMD+web.CHAT_OAUTH_CLIENT)) { return show(msg) }
|
||||
if (location.pathname == nfs.PS && can.base.beginWith(msg.Option(ice.MAIN)||"", nfs.WIKI_PORTAL, web.CHAT_CMD+web.WIKI_PORTAL)) { return show(msg) }
|
||||
msg.Option(mdb.PLUGIN) && can.onappend.plugin(can, {space: msg.plugin[1], index: msg.Option(mdb.PLUGIN)}, function(sub) { can.onmotion.hidden(can, sub._target) }, document.body)
|
||||
@ -137,7 +141,8 @@ Volcanos(chat.ONACTION, {_init: function(can) {},
|
||||
can.user.jumps(can.misc.MergeURL(can, args, true))
|
||||
},
|
||||
avatar: function(event, can) { if (can.user.isMobile) { return can.onaction.usernick(event, can) }
|
||||
var src = can.onexport.avatar(can); can.onaction.carte(can.request(event, {_style: "header avatar"}), can, ["<img src='"+src+"'>"]) },
|
||||
var src = can.onexport.avatar(can); can.onaction.carte(can.request(event, {_style: "header avatar"}), can, ["<img src='"+src+"'>"])
|
||||
},
|
||||
usernick: function(event, can) { can.onaction.carte(can.request(event, {_style: "header usernick"}), can, can.onaction._menus) },
|
||||
shareuser: function(event, can) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE, mdb.TYPE, aaa.LOGIN, mdb.NAME, can.user.title()]) },
|
||||
theme: function(event, can) { can.page.Select(can, can._output, "div.item.theme>i:first-child", function(target) {
|
||||
@ -191,8 +196,7 @@ Volcanos(chat.ONEXPORT, {
|
||||
avatar: function(can) { return can.misc.Resource(can, can.user.info.avatar == "void"? "": can.user.info.avatar) },
|
||||
background: function(can) { return can.user.info.background == "void"? "": can.user.info.background },
|
||||
theme: function(can) { return can._theme || can.misc.SearchOrConf(can, chat.THEME) || can.__theme || "" },
|
||||
// || (can.base.isNight()? html.DARK: html.LIGHT) },
|
||||
height: function(can) { return can._target.offsetHeight },
|
||||
height: function(can) { return can._target.offsetHeight },
|
||||
})
|
||||
Volcanos(chat.ONPLUGIN, {
|
||||
location: shy("请求地址", {copy: function(can) { can.user.copy(msg._event, can, location.href) }}, [web.LINK, ice.LIST, ice.COPY], function(can, msg, cb) {
|
||||
|
@ -4,7 +4,7 @@ Volcanos(chat.ONACTION, {
|
||||
onclick: function(event, can) { can.Conf(mdb.TYPE) == html.BUTTON && can.run(event, [ctx.ACTION, can.Conf(mdb.NAME)].concat(can.sup.Input())), can.onkeymap.prevent(event) },
|
||||
onchange: function(event, can) { if (can.Conf(mdb.TYPE) != html.SELECT) { return }
|
||||
can.sup.onexport.session && can.sup.onexport.session(can.sup, "action:"+can.Conf(mdb.NAME), event.target.value)
|
||||
can.run(event)
|
||||
can.run(can.request(event, {_toast: event.isTrusted? can.user.trans(can, ice.PROCESS, "处理"): "" , _method: http.GET}))
|
||||
},
|
||||
onkeydown: function(event, can) { can.onkeymap.input(event, can, event.target); if (can.Conf(mdb.TYPE) == html.TEXTAREA && !event.ctrlKey) { return }
|
||||
if (event.key == code.ENTER) { return can.onkeymap.prevent(event), can.run(event), can.onmotion.focus(can, event.target) }
|
||||
|
@ -21,7 +21,9 @@ Volcanos(chat.ONFIGURE, {date: {
|
||||
target.value == "" && (now.setMinutes(now.getMinutes()>30? 30: 0), now.setSeconds(0))
|
||||
function show(now) { can.Action(YEAR, now.getFullYear()), can.Action(MONTH, now.getMonth()+1)
|
||||
can.Action(HOUR, now.getHours()), can.Action(MINUTE, parseInt(now.getMinutes()/30)*30), can.Action(SECOND, 0)
|
||||
can.page.Appends(can, can._table, can.date.List(can, function(event, day) { day.setHours(now.getHours()), day.setMinutes(now.getMinutes()), day.getSeconds(now.getSeconds()), _cb(day), can.close() }, now))
|
||||
can.page.Appends(can, can._table, can.date.List(can, function(event, day) {
|
||||
day.setHours(can.Action(HOUR)), day.setMinutes(can.Action(MINUTE)), day.getSeconds(can.Action(SECOND)), _cb(day), can.close()
|
||||
}, now))
|
||||
var l = can.date.solar2lunar(now); can.page.Appends(can, can._status, [{view: "today", inner: [l.gzYear, l.Animal+"年", l.cnMonth, l.cnDay, l.lunarFestival||l.festival||l.Term, l.Astro].join(lex.SP)}])
|
||||
return now
|
||||
} show(now), can._show = function(d) { d? _cb(show(now = new Date(now.getTime()+d*24*3600*1000))): _cb(show(now)) }
|
||||
|
@ -1,10 +1,10 @@
|
||||
Volcanos(chat.ONFIGURE, {img: {
|
||||
_init: function(can, meta, target) { target.value == meta.value && (target.value = ""); var images = can.core.Split(target.value)
|
||||
var count = parseInt(meta.value||"1"), width = target.parentNode.offsetWidth; for (var n = 1; n < 10; n++) { if (n*n >= count) { width = (width/n-10); break } }
|
||||
function add(target, hash) { target._hash = hash, can.page.Appends(can, target, [{img: can.base.MergeURL(can.misc.MergeURL(can, {_path: web.SHARE_CACHE+hash}, true), {pod: meta.space||undefined}), height: width, width: width}]) }
|
||||
// function add(target, hash) { target._hash = hash, can.page.Appends(can, target, [{img: can.base.MergeURL(can.misc.MergeURL(can, {_path: web.SHARE_CACHE+hash}, true), {pod: meta.space||undefined}), height: width, width: width}]) }
|
||||
function add(target, hash) { target._hash = hash, can.page.Appends(can, target, [{img: hash, height: width, width: width}]) }
|
||||
function set() { target.value = can.page.SelectChild(can, target.parentNode, html.DIV, function(target) { return target._hash }).join(mdb.FS) }
|
||||
can.onmotion.hidden(can, target)
|
||||
can.onappend.style(can, html.FLEX, target.parentNode)
|
||||
can.onmotion.hidden(can, target), can.onappend.style(can, html.FLEX, target.parentNode)
|
||||
for (var i = 0; i < count; i++) {
|
||||
can.page.Append(can, target.parentNode, [{view: html.FLEX, style: {
|
||||
"clear": i%n == 0? "both": "none", height: width, width: width,
|
||||
|
@ -1,7 +1,9 @@
|
||||
Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.db.current = msg.TableDetail()
|
||||
can.ui.target = can.page.Appends(can, can._output, [{type: html.IFRAME, src: can.db.current.link, height: can.ConfHeight(), width: can.ConfWidth()}])._target
|
||||
Volcanos(chat.ONIMPORT, {
|
||||
_init: function(can, msg) { can.db.current = msg.TableDetail()
|
||||
// can.Conf("_width") && can.sup.onimport.size(can.sup, can.Conf("_height"), can.Conf("_width"), false)
|
||||
can.page.style(can, can._output, "overflow-y", html.HIDDEN)
|
||||
can.sup.onexport.link = function() { return can.db.current.link }
|
||||
can.ui.target = can.page.Appends(can, can._output, [{type: html.IFRAME, src: can.db.current.link, height: can.ConfHeight(), width: can.ConfWidth()}])._target
|
||||
can.sup.onexport.link = function() { return can.base.beginWith(can.db.current.link, "/")? location.origin+can.db.current.link: can.db.current.link }
|
||||
},
|
||||
layout: function(can) {
|
||||
var item = can.db.current; can.sup.onexport.title(can, item.name||item.link.split(mdb.QS)[0])
|
||||
|
@ -1,3 +1,4 @@
|
||||
fieldset.inner>div.output div.content { position:relative; }
|
||||
fieldset.inner>div.output div.content td.text { height:var(--code-line-height); }
|
||||
fieldset.inner>div.output div.content td.text span.keyword { color:var(--code-keyword); box-shadow:var(--keyword-box-shadow); }
|
||||
fieldset.inner>div.output div.content td.text span.comment { color:var(--code-comment); }
|
||||
@ -34,6 +35,8 @@ fieldset.inner>div.output>div.layout>div.layout>div.profile h2 { border-bottom:v
|
||||
fieldset.inner>div.output>div.layout>div.layout>div.profile pre>code { padding-left:var(--table-padding); border-left:var(--box-notice3); display:block; }
|
||||
fieldset.inner>div.output>div.layout>div.layout>div.profile>div.code { white-space:unset; padding:var(--table-padding); }
|
||||
fieldset.inner>div.output>div.layout>div.layout>div.profile>div.status { background-color:var(--output-bg-color); height:var(--action-height); overflow:auto; position:sticky; bottom:0; }
|
||||
fieldset.inner>div.output>div.layout>div.layout>div.profile fieldset>form.option>div.item.text input { max-width:80px; }
|
||||
fieldset.inner>div.output>div.layout>div.layout>div.profile fieldset>div.action>div.item.text input { max-width:80px; }
|
||||
fieldset.inner>div.output>div.layout>div.layout>div.profile div.status>div { font-style:italic; font-size:var(--status-font-size); padding:var(--input-padding); float:left; }
|
||||
fieldset.inner>div.output>div.layout>div.layout>div.content div.tips { color:var(--disable-fg-color); font-style:italic; line-height:var(--code-line-height); position:absolute; top:0; right:10px; }
|
||||
fieldset.inner>div.output>div.layout>div.layout>fieldset.story { box-shadow:unset; }
|
||||
@ -81,6 +84,12 @@ tr.line>td.text { white-space:pre; line-height:var(--code-line-height); padding-
|
||||
tr.line:hover { background-color:var(--hover-bg-color); }
|
||||
tr.line.delete { background-color:#3c2626; }
|
||||
tr.line.insert { background-color:#283e2d; }
|
||||
body div.input.inner.find.float div.action>div.item {
|
||||
float:left;
|
||||
}
|
||||
body div.input.inner.find.float div.action>div.item>input {
|
||||
min-width:unset;
|
||||
}
|
||||
body.light tr.line.delete { background-color:#ffeef0; }
|
||||
body.light tr.line.insert { background-color:#e6ffed; }
|
||||
body.white tr.line.delete { background-color:#e6ffed; }
|
||||
|
@ -6,8 +6,9 @@ const VIEW_CREATE = "tabview.view.create", VIEW_REMOVE = "tabview.view.remove",
|
||||
Volcanos(chat.ONIMPORT, {
|
||||
_init: function(can, msg, cb) { can.onappend.style(can, code.INNER), can.Mode(msg.Option("mode")||can.Mode())
|
||||
if (can.Mode() == ice.MSG_RESULT) {
|
||||
can.Conf("_width", can.ConfWidth())
|
||||
can.Conf("_width", can.base.Max(can.ConfWidth(), window.innerWidth-12))
|
||||
msg.result = msg.result||[can._output.innerHTML], can.Mode(chat.SIMPLE), can.sup.Mode(chat.SIMPLE)
|
||||
can.Option(nfs.FILE, can.Conf(nfs.FILE)||can.Option(nfs.FILE))
|
||||
}
|
||||
can.onmotion.clear(can, can._output), msg.result = msg.result||[""]
|
||||
var paths = can.core.Split(can.Option(nfs.PATH)); can.Option(nfs.PATH, paths[0])
|
||||
@ -186,10 +187,10 @@ Volcanos(chat.ONIMPORT, {
|
||||
can.onimport.process(can, msg, can.ui.profile, height, width-border, function(sub) {
|
||||
_msg._profile_plugin = sub
|
||||
can.ui.profile._plugin = sub, can.page.style(can, sub._output, html.MAX_WIDTH, "")
|
||||
sub.onaction.close = function() {
|
||||
can._msg._profile_hidden = true
|
||||
can.onexport.session(can, PROFILE_ARGS+can.Option(nfs.PATH)+can.Option(nfs.FILE), ""),
|
||||
can.onmotion.hidden(can, can.ui.profile), can.onimport.layout(can) }
|
||||
sub.onaction.close = function() { can._msg._profile_hidden = true
|
||||
can.onexport.session(can, PROFILE_ARGS+can.Option(nfs.PATH)+can.Option(nfs.FILE), "")
|
||||
can.onmotion.hidden(can, can.ui.profile), can.onimport.layout(can)
|
||||
}
|
||||
sub.Conf(ctx.ARGS) && can.onexport.session(can, PROFILE_ARGS+can.Option(nfs.PATH)+can.Option(nfs.FILE), JSON.stringify(sub.Conf(ctx.ARGS)))
|
||||
can.page.style(can, can.ui.profile, html.WIDTH, width+border, html.MAX_WIDTH, width+border), can.onimport.layout(can)
|
||||
})
|
||||
@ -204,7 +205,9 @@ Volcanos(chat.ONIMPORT, {
|
||||
},
|
||||
process: function(can, msg, target, height, width, cb) { can.onmotion.clear(can, target)
|
||||
if (msg.Option(ice.MSG_PROCESS) == ice.PROCESS_FIELD) {
|
||||
msg.Table(function(item) { item.type = chat.STORY, item.height = height, item.width = width, item.display = msg.Option(ice.MSG_DISPLAY)
|
||||
msg.Table(function(item) { item.type = chat.STORY, item.height = height, item.width = width
|
||||
item.display = msg.Option(ice.MSG_DISPLAY)
|
||||
item.display_css = msg.Option(ice.MSG_DISPLAY_CSS)
|
||||
if (can.base.isIn(item.index, web.WIKI_WORD)) { item.style = html.OUTPUT }
|
||||
can.onimport.plug(can, item, function(sub) {
|
||||
sub.onaction.close = function() { can.onmotion.hidden(can, target), can.onimport.layout(can) }
|
||||
@ -258,7 +261,7 @@ Volcanos(chat.ONIMPORT, {
|
||||
})
|
||||
}) },
|
||||
layout: function(can) {
|
||||
if (can.Conf(ctx.STYLE) == html.OUTPUT) { return can.page.style(can, can.ui.content, html.WIDTH, (can.Conf("_width")||can.ConfWidth())-3) }
|
||||
if (can.Conf(ctx.STYLE) == html.OUTPUT) { return can.page.style(can, can.ui.content, html.WIDTH, (can.Conf("__width")||can.ConfWidth())-(can.user.isMobile? 4: 2)) }
|
||||
if (can.isSimpleMode() && !can.page.tagis(can._fields, html.FIELDSET_FLOAT)) { can.page.style(can, can._output, html.MAX_HEIGHT, "") }
|
||||
if (can.isSimpleMode()) { can.ui.layout(can.ConfHeight(), can.ConfWidth()); return can.page.style(can, can.ui.content, html.WIDTH, can.ConfWidth()) }
|
||||
if (can.isCmdMode()) { can.page.style(can, can._output, html.HEIGHT, can.ConfHeight(can.page.height())) }
|
||||
@ -353,7 +356,7 @@ Volcanos(chat.ONSYNTAX, {
|
||||
can.onmotion.delay(can, function() { can.onappend.scroll(can) })
|
||||
}
|
||||
can.require([chat.PLUGIN_LOCAL+"code/inner/syntax.js"], function() { var parse = can.onexport.parse(can); can.Conf(chat.PLUG) && (can.onsyntax[parse] = can.Conf(chat.PLUG))
|
||||
var p = can.onsyntax[parse]; !p? can.runAction({}, mdb.PLUGIN, [parse, msg.Option(nfs.FILE), msg.Option(nfs.PATH)], function(msg) { p = can.base.Obj(msg.Result())
|
||||
var p = can.onsyntax[parse]; !p && msg.Option(nfs.FILE)? can.runAction({}, mdb.PLUGIN, [parse, msg.Option(nfs.FILE), msg.Option(nfs.PATH)], function(msg) { p = can.base.Obj(msg.Result())
|
||||
p && p.script? can.require([p.script], function() { show(can.onsyntax[msg.Option(lex.PARSE)||parse]) }): show(can.onsyntax[parse] = p)
|
||||
}): show(p)
|
||||
})
|
||||
@ -577,7 +580,9 @@ Volcanos(chat.ONEXPORT, {
|
||||
selection: function(can, str) { var s = document.getSelection().toString(), begin = str.indexOf(s), end = begin+s.length
|
||||
for (var i = begin; i >= 0; i--) { if (str[i].match(/[a-zA-Z0-9_.]/)) { s = str.slice(i, end) } else { break } } return s
|
||||
},
|
||||
parse: function(can) { return can._msg.Option(lex.PARSE)||can.base.Ext(can.Option(nfs.FILE)) },
|
||||
parse: function(can) {
|
||||
return can._msg.Option(lex.PARSE)||can.base.Ext(can.Option(nfs.FILE))
|
||||
},
|
||||
split: function(can, file) { var ls = file.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)]
|
||||
|
@ -133,8 +133,7 @@ Volcanos(chat.ONSYNTAX, {
|
||||
regexp: {"[A-Z_0-9]+": code.CONSTANT},
|
||||
keyword: {
|
||||
"source": code.KEYWORD, "return": code.KEYWORD,
|
||||
"config": code.KEYWORD,
|
||||
"command": code.KEYWORD,
|
||||
"command": code.KEYWORD, "config": code.KEYWORD,
|
||||
"create": code.FUNCTION, "modify": code.FUNCTION, "insert": code.FUNCTION,
|
||||
"spide": code.DATATYPE, "serve": code.DATATYPE, "dream": code.DATATYPE,
|
||||
"user": code.DATATYPE,
|
||||
@ -145,6 +144,14 @@ Volcanos(chat.ONSYNTAX, {
|
||||
"field": code.KEYWORD, "image": code.KEYWORD, "video": code.KEYWORD, "audio": code.KEYWORD,
|
||||
"style": code.KEYWORD,
|
||||
"inner": code.KEYWORD,
|
||||
"project": code.KEYWORD,
|
||||
"product": code.KEYWORD,
|
||||
"material": code.KEYWORD,
|
||||
"publish": code.KEYWORD,
|
||||
|
||||
"username": code.FUNCTION, "usernick": code.FUNCTION,
|
||||
"repos": code.FUNCTION, "binary": code.FUNCTION,
|
||||
"language": code.FUNCTION, "avatar": code.FUNCTION,
|
||||
},
|
||||
func: function(can, push, text, indent, opts) { var ls = can.core.Split(text, "\t ")
|
||||
opts.chapter = opts.chapter||0
|
||||
@ -273,8 +280,9 @@ Volcanos(chat.ONSYNTAX, {
|
||||
"not": code.DATATYPE, "first-child": code.DATATYPE, "last-child": code.DATATYPE, "nth-child": code.DATATYPE,
|
||||
"placeholder": code.DATATYPE, "hover": code.DATATYPE, "focus": code.DATATYPE,
|
||||
|
||||
"$action": code.KEYWORD,
|
||||
"$output": code.KEYWORD,
|
||||
"$body": code.KEYWORD, "$fieldset": code.KEYWORD,
|
||||
"$option": code.KEYWORD, "$action": code.KEYWORD, "$output": code.KEYWORD, "$status": code.KEYWORD,
|
||||
"$content": code.KEYWORD, "$profile": code.KEYWORD, "$display": code.KEYWORD, "$project": code.KEYWORD,
|
||||
|
||||
"output": code.KEYWORD,
|
||||
"background-color": code.FUNCTION, "color": code.FUNCTION,
|
||||
|
@ -23,18 +23,30 @@ Volcanos(chat.ONFIGURE, {
|
||||
can.run({}, [ctx.ACTION, nfs.REPOS], function(msg) { var paths = can.db.paths
|
||||
can.core.List(paths.concat(msg.Table(function(value) { return value.path })), function(p) {
|
||||
if (can.base.beginWith(p, nfs.USR_LOCAL_WORK) || can.base.isIn(p,
|
||||
// nfs.USR_LEARNING, nfs.USR_INTSHELL,
|
||||
nfs.USR_ICONS, nfs.USR_GEOAREA, nfs.USR_NODE_MODULES,
|
||||
// nfs.USR_PROGRAM,
|
||||
nfs.USR_WEBSOCKET, nfs.USR_GO_QRCODE, nfs.USR_GO_GIT
|
||||
nfs.USR_ICONS,
|
||||
"usr/material/",
|
||||
nfs.USR_NODE_MODULES,
|
||||
nfs.USR_WEBSOCKET,
|
||||
nfs.USR_GO_QRCODE,
|
||||
nfs.USR_GO_GIT,
|
||||
nfs.USR_GEOAREA,
|
||||
)) { return }
|
||||
if (p && paths.indexOf(p) == -1 && p[0] != nfs.PS) { paths.push(p) }
|
||||
})
|
||||
function show(target, zone, path) { can.run(can.request({}, {dir_root: path, dir_deep: true}), [nfs.PWD], function(msg) {
|
||||
var cache, list = can.core.List(msg.Table(), function(value) {
|
||||
if (path == nfs.SRC && can.base.isIn(value.path, "main.ico", "main.svg", "version.go", "binpack.go", "binpack_usr.go")) { return }
|
||||
if (path == nfs.SRC && can.base.isIn(value.path,
|
||||
"main.svg",
|
||||
"main.ico",
|
||||
"main.png",
|
||||
"main.jpg",
|
||||
"qrcode.jpg",
|
||||
"version.go",
|
||||
"binpack.go",
|
||||
"binpack_usr.go",
|
||||
)) { return }
|
||||
if (path == nfs.USR_RELEASE && can.base.isIn(value.path, "conf.go", "binpack.go")) { return }
|
||||
if (path == args[0] && args[1].indexOf(value.path) == 0) { value.expand = true }
|
||||
if (path == args[0] && args[1] == value.path) { value.expand = true }
|
||||
return value
|
||||
}); can.onmotion.clear(can, target), zone._total(msg.Length())
|
||||
cache = can.onimport.tree(can, list, function(event, item, target) {
|
||||
|
@ -46,6 +46,7 @@ Volcanos(chat.ONIMPORT, {
|
||||
if (arg[1] == "~~~end~~~") { arg[0] == "current"? can.sup.onmotion._close({}, can.sup): can.sup.onimport._back(can.sup) } else { term.write(arg[1]) }
|
||||
},
|
||||
layout: function(can) {
|
||||
can.page.style(can, can._output, html.HEIGHT, can.ConfHeight())
|
||||
can.ui.layout(can.ConfHeight(), can.ConfWidth(), 0, function() {
|
||||
can.core.Item(can.db, function(hash, term) { term._fit && term._fit.fit() })
|
||||
can.db.value && can.db.value._term && can.onexport.term(can, can.db.value._term)
|
||||
|
@ -9,7 +9,7 @@ Volcanos(chat.ONIMPORT, {
|
||||
can._temp = []
|
||||
if (can.ConfIndex() == web.WIKI_DRAW) { can.ui = can.onappend.layout(can), can.onexport.title(can, can.OptionPath())
|
||||
if (can.isCmdMode() && !can.user.isMobile) { can.onmotion.toggle(can, can.ui.profile, true) } else { can.onmotion.hidden(can, can._action), can.onmotion.hidden(can, can.ui.project) }
|
||||
} else { can.ui = {content: can._output} } can.page.Modify(can, can.ui.content, msg.Results()||can.onexport.content(can))
|
||||
} else { can.ui.content || (can.ui = {content: can._output}) } can.page.Modify(can, can.ui.content, msg.Results()||can.onexport.content(can))
|
||||
can.page.Select(can, can.ui.content, html.SVG, function(target) { can.ui.svg = can.ui.group = can.onimport._block(can, target), can.onimport._project(can, target), can.ui.profile && can.core.ItemCB(can.onaction, target, can)
|
||||
can.page.Select(can, target, "", function(target) { can.onimport._block(can, target), can.page.tagis(target, svg.G) && target.Value(html.CLASS) && can.onimport._project(can, target) })
|
||||
}), can.ondetail._select(can, can.db.hash[1]||can.OptionPid()||can.ui.svg.Value(svg.PID)), can.ui.points = []
|
||||
|
@ -1,14 +1,17 @@
|
||||
Volcanos(chat.ONIMPORT, {
|
||||
_init: function(can, msg, cb) { can.onappend.style(can, wiki.FEEL)
|
||||
can.run({}, [], function(_msg) { can.db.albums = _msg
|
||||
can.ui = can.onappend.layout(can), can.user.isMobile && (can.onaction.list = [web.UPLOAD]), cb && cb(msg)
|
||||
can.ui = can.onappend.layout(can)
|
||||
// can.user.isMobile && (can.onaction.list = [web.UPLOAD])
|
||||
cb && cb(msg)
|
||||
if (can.base.isIn(can.Action("sort")||"", mdb.TIME, "")) {
|
||||
can.onimport._project(can, msg)
|
||||
} else {
|
||||
can.onaction.sort({}, can, "sort", can.Action("sort"))
|
||||
} can.onimport.page(can, can.db.list, can.db.begin = 0)
|
||||
can.onmotion.toggle(can, can.ui.display, can.user.isMobile || can.page.isDisplay(can.ui.project)), can.onimport.layout(can)
|
||||
can.onmotion.toggle(can, can.ui.display, can.page.isDisplay(can.ui.project)), can.onimport.layout(can)
|
||||
})
|
||||
can.onmotion.toggle(can, can._action, true)
|
||||
},
|
||||
_project: function(can, msg) { can.db.list = [], can.db.dir_root = msg.Option(nfs.DIR_ROOT)
|
||||
can.ui.albums = can.page.Appends(can, can.ui.project, ["albums"])._target
|
||||
@ -62,7 +65,7 @@ Volcanos(chat.ONIMPORT, {
|
||||
} can.onmotion.select(can, can.ui.display, "*", item._display)
|
||||
},
|
||||
_file: function(can, path) {
|
||||
return (location.href.indexOf(ice.HTTP) == 0? location.origin: "http://localhost:9020")+can.misc.Resource(can, can.db.dir_root+path, can.ConfSpace())
|
||||
return can.misc.Resource(can, can.db.dir_root+path, can.ConfSpace())
|
||||
},
|
||||
file: function(can, path, item, index, target, auto) { item._path = path = can.onimport._file(can, path)
|
||||
var cb = can.onfigure[can.base.Ext(path)]||can.onfigure[wiki.IMAGE]
|
||||
@ -77,6 +80,7 @@ Volcanos(chat.ONIMPORT, {
|
||||
}, [""])
|
||||
Volcanos(chat.ONFIGURE, {
|
||||
png: function(can, item) { return can.onfigure.image(can, item) },
|
||||
gif: function(can, item) { return can.onfigure.image(can, item) },
|
||||
jpg: function(can, item) { return can.onfigure.image(can, item) },
|
||||
jpeg: function(can, item) { return can.onfigure.image(can, item) },
|
||||
image: function(can, item) { return {img: item._path, title: item.title, onclick: function(event) { item._target.click() }} },
|
||||
|
@ -2,7 +2,8 @@ fieldset.word>div.output { padding:var(--plugin-padding); }
|
||||
fieldset.word>div.output p { margin:var(--title-margin) auto; }
|
||||
fieldset.word>div.output h3 { margin-top:var(--title-margin); }
|
||||
fieldset.word>div.output h2.story[data-type=spark][data-name=title] { text-align:center; }
|
||||
fieldset.word>div.output ul { margin:20px; }
|
||||
fieldset.word>div.output code { font-style: italic; }
|
||||
fieldset.word>div.output ul { margin:20px; font-family:var(--code-font-family); word-break:break-all; }
|
||||
fieldset.word>div.output ul>li:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); cursor:pointer; }
|
||||
fieldset.word>div.output img { display:block; margin:auto; max-height:100%; max-width:100%; }
|
||||
fieldset.word>div.output div.project img { margin:unset; }
|
||||
|
@ -21,7 +21,7 @@ Volcanos(chat.ONIMPORT, {
|
||||
list: function(can, root, cb, cbs, target) { target = target||can._output
|
||||
can.core.List(root.list, function(item) { var ui = can.page.Append(can, target, [{view: [[html.ITEM, "open"]], list: [{text: item.meta.name}, item.list && {icon: icon.CHEVRON_DOWN}], onclick: function(event) {
|
||||
can.page.ClassList.set(can, ui.item, "open", can.base.isFunc(cb) && cb(event, item) || can.onmotion.toggle(can, ui.list))
|
||||
can.onmotion.select(can, target, html.DIV_ITEM, event.target)
|
||||
can.onmotion.select(can, target, html.DIV_ITEM, event.currentTarget)
|
||||
}, _init: function(target) { if (item.meta.name == "_") { target.innerHTML = "", can.onappend.style(can, html.SPACE, target) }
|
||||
cbs && cbs(target, item)
|
||||
}}, {view: html.LIST}]); can.onimport.list(can, item, cb, cbs, ui.list) })
|
||||
@ -77,14 +77,16 @@ Volcanos(chat.ONIMPORT, {
|
||||
}) }
|
||||
},
|
||||
field: function(can, meta, target) { var item = can.base.Obj(meta.meta), padding = can.Conf(html.PADDING)
|
||||
var height = can.base.Max(html.STORY_HEIGHT, can.ConfHeight()-4*html.ACTION_HEIGHT-2*padding), width = item.width||can.ConfWidth()-2*padding-2
|
||||
var height = can.base.Max(html.STORY_HEIGHT, can.ConfHeight()-4*html.ACTION_HEIGHT-2*padding), width = item.width||can.ConfWidth()-2*padding
|
||||
can.core.Item(item, function(key, value) { if (can.base.beginWith(key, "meta.")) { can.core.Value(item, key, value), delete(item[key]) } })
|
||||
can.onappend.plugin(can, item, function(sub) { can._plugins = (can._plugins||[]).concat([sub])
|
||||
can.user.isMobile || sub.Conf("__width", item.width)
|
||||
can.core.Value(item, "auto.cmd") && can.onmotion.delay(function() { sub.runAction(sub.request({}, can.core.Value(item, "opts")), can.core.Value(item, "auto.cmd")) })
|
||||
var size = sub.onimport.size; sub.onimport.size = function(can, height, width, auto, mode) { size(can, height, width, auto, mode)
|
||||
can.page.style(can, sub._output, html.MAX_HEIGHT, "", "overflow-y", "hidden")
|
||||
sub.sub && sub.sub.ui.content && can.page.style(can, sub.sub.ui.content, html.HEIGHT, "", "overflow-y", "hidden")
|
||||
}, sub.onimport.size(sub, height, width, true)
|
||||
can.onimport.layout(can)
|
||||
}, can._output, target)
|
||||
},
|
||||
layout: function(can) { padding = can.Conf(html.PADDING)
|
||||
|
@ -39,8 +39,8 @@ Volcanos(chat.ONIMPORT, {
|
||||
}
|
||||
var option = can.base.Obj(msg.Option("field.option"))
|
||||
msg.Table(function(item) { tabs && can.onmotion.cache(can, function() { return tabHash })
|
||||
var sup = item.space? can._root.Action: can
|
||||
can.onappend._plugin(sup, item, {index: item.index, args: can.base.Obj(item.args||item.arg, []), height: height, width: width}, function(sub) { can._plugins = (can._plugins||[]).concat([sub])
|
||||
var sup = item.space? can._root.Action: can; height = can.base.Max(item._height||height, can.ConfHeight()), width = can.base.Max(item._width||width, can.ConfWidth())
|
||||
can.onappend._plugin(sup, item, {index: item.index, args: can.base.Obj(item.args||item.arg, []), height: height, width: width, icons: item._icon}, function(sub) { can._plugins = (can._plugins||[]).concat([sub])
|
||||
sub.run = function(event, cmds, cb) { var index = msg.Option(ice.MSG_INDEX)||item.index; sup.run(can.request(event, {pod: item.space}, option), (msg[ice.FIELD_PREFIX]? msg[ice.FIELD_PREFIX]: index? [ctx.RUN, index]: []).concat(cmds), cb, true) }
|
||||
can.page.ClassList.has(can, sub._target, html.FLOAT)? can.onmotion.float(sub): sub.onimport.size(sub, height, width, !can.user.isMobile), cb && cb(sub)
|
||||
if (item.style == html.FLOAT) { return } can.onmotion.delay(can, function() { can.onmotion.scrollIntoView(can, sub._target) }, 300)
|
||||
@ -81,7 +81,9 @@ Volcanos(chat.ONIMPORT, {
|
||||
}); return
|
||||
},
|
||||
_grow: function(can, msg, arg) {
|
||||
var sub = can.sub; if (sub && sub.onimport && sub.onimport.grow) { return sub.onimport.grow(sub, msg, msg.detail[1], msg.detail[2]) }
|
||||
var sub = can.sub
|
||||
if (sub && sub.onimport && sub.onimport._grow) { return sub.onimport._grow(sub, msg, msg.detail[1], msg.detail[2]) }
|
||||
if (sub && sub.onimport && sub.onimport.grow) { return sub.onimport.grow(sub, msg, msg.detail[1], msg.detail[2]) }
|
||||
if (msg.Option(ctx.DISPLAY)) {
|
||||
function _grow() { if (can.sub._grow_list.length == 0) { return } if (can.sub._grow_running) { return } can.sub._grow_running = true
|
||||
var msg = can.sub._grow_list.shift(), text = msg.detail[1]; sub._grow.onappend._status(sub._grow, msg.Option(ice.MSG_STATUS), null, msg)
|
||||
@ -126,7 +128,7 @@ Volcanos(chat.ONIMPORT, {
|
||||
(can.page.style(can, can._output, html.HEIGHT, height, html.WIDTH, width, html.MAX_HEIGHT, "", html.MAX_WIDTH, ""), can.page.style(can, can._target, html.WIDTH, width))
|
||||
if (can.misc.Search(can, log.DEBUG) == ice.TRUE) { can.Status(html.HEIGHT, can.base.Max(height, can._output.offsetHeight), html.WIDTH, width) }
|
||||
can.page.style(can, can._status, html.MAX_WIDTH, width)
|
||||
can.core.List(can._plugins, function(sub) { sub.onimport.size(sub, height, width, false) })
|
||||
can.core.List(can._plugins, function(sub) { can.page.tagis(sub._target, "fieldset.float") || sub.onimport.size(sub, height, width, false) })
|
||||
var sub = can.sub; if (!sub) { return auto } sub.Mode(mode), sub.ConfHeight(height), sub.ConfWidth(width), can.onimport._size(can)
|
||||
mode? sub.onlayout[mode](sub, height, width): sub.onlayout._init(sub, height, width)
|
||||
return auto
|
||||
@ -366,7 +368,7 @@ Volcanos(chat.ONEXPORT, {
|
||||
if (arguments.length == 2 && !can.base.isIn(can.ConfIndex(), web.PORTAL, code.VIMER, wiki.FEEL)) { push(can.user.trans(can, can.ConfIndex().split(".").pop(), can.ConfHelp())) }
|
||||
}
|
||||
can.core.List(arguments, function(title, index) { index > 0 && push(title) })
|
||||
can.user.isMobile || push(can.user.info.titles||can.ConfSpace()||can.misc.Search(can, ice.POD))
|
||||
can.user.isMobile || push(can.user.mod.isPod? can.user.info.titles||can.ConfSpace()||can.misc.Search(can, ice.POD): location.host)
|
||||
can.user.title(list.join(" "))
|
||||
},
|
||||
args: function(can) { return can.Option() },
|
||||
|
@ -5,7 +5,11 @@ Volcanos(chat.ONIMPORT, {
|
||||
return {view: [[html.ITEM, item.type]], list: [item.type != html.BUTTON && {text: [can.user.trans(can, item.name, item._trans, html.INPUT), "", mdb.NAME]}, item.need == "must" && {text: ["*", "", "need"]}], _init: function(target) {
|
||||
item.type == html.BUTTON && (item.onclick = function(event) { var args = []
|
||||
can.core.Item(can.page.SelectArgs(can, can._output)[0], function(key, value) { args.push(key, value) })
|
||||
can.Update(can.request(event, {_handle: ice.TRUE}), [ctx.ACTION, item.name].concat(args), function() {
|
||||
can.Update(can.request(event, {_handle: ice.TRUE}), [ctx.ACTION, item.name].concat(args), function(msg) {
|
||||
if (msg.IsErr()) {
|
||||
can.user.toastFailure(can, msg.Result())
|
||||
return
|
||||
}
|
||||
can.Update()
|
||||
})
|
||||
}), can.onappend.input(can, item, "", target)
|
||||
|
@ -1,13 +1,13 @@
|
||||
Volcanos(chat.ONIMPORT, {
|
||||
_init: function(can, msg, cb) { can.page.requireDraw(can, function() { can.db.delay = 50
|
||||
can.onappend.style(can, "pie")
|
||||
can.list = can.onimport._data(can, msg, can.Conf(mdb.FIELD)||msg.append[1]||mdb.VALUE)
|
||||
can.core.List(can.list, function(item) { msg.Push("weight", item.value.weight = parseInt(item.span*100/360)+"%").Push(cli.COLOR, '<span style="background-color:'+item.color+'"> </span>') })
|
||||
can.onaction.list = [], can.ui.display = can.page.Append(can, can._output, [html.DISPLAY])._target
|
||||
can.onappend.table(can, msg, null, can.ui.display), can.page.Select(can, can.ui.display, html.TR, function(tr, index) { can.ui.table = tr.parentNode
|
||||
can.page.Modify(can, tr, {onmouseenter: function(event) { can._draw(can.db.which = index-1) }})
|
||||
}), can.base.isFunc(cb) && cb(msg), can.onappend._status(can, msg.append)
|
||||
}) },
|
||||
_init: function(can, msg, cb) { can.ui = can.onappend.layout(can)
|
||||
can.page.requireDraw(can, function() { can.db.delay = 50, can.onappend.style(can, "pie"), can.onaction.list = []
|
||||
can.list = can.onimport._data(can, msg, can.Conf(mdb.FIELD)||msg.append[1]||mdb.VALUE)
|
||||
can.core.List(can.list, function(item) { msg.Push("weight", item.value.weight = parseInt(item.span*100/360)+"%").Push(cli.COLOR, '<span style="background-color:'+item.color+'"> </span>') })
|
||||
can.onappend.table(can, msg, null, can.ui.profile), can.page.Select(can, can.ui.profile, html.TR, function(tr, index) { can.ui.table = tr.parentNode
|
||||
can.page.Modify(can, tr, {onmouseenter: function(event) { can._draw(can.db.which = index-1) }})
|
||||
}), can.base.isFunc(cb) && cb(msg), can.onappend._status(can, msg.append)
|
||||
})
|
||||
},
|
||||
_data: function(can, msg, field) { var list = []
|
||||
var color = [
|
||||
"#8085e9",
|
||||
@ -69,6 +69,15 @@ Volcanos(chat.ONIMPORT, {
|
||||
return parseInt(value)
|
||||
},
|
||||
layout: function(can) { if (!can.ui || !can.ui.svg) { return }
|
||||
can.onmotion.hidden(can, can.ui.project), can.onmotion.hidden(can, can.ui.display), can.onmotion.toggle(can, can.ui.profile, true)
|
||||
var _width = can.base.Max(can.ConfWidth()-can.ConfHeight(), 600, 200)
|
||||
can.page.style(can, can.ui.profile, html.HEIGHT, can.ConfHeight(), html.WIDTH, _width, html.FLEX, "0 0 "+(_width)+"px")
|
||||
var width = can.ConfWidth()-_width, height = can.ConfHeight()-4, margin = 40, r = can.base.Max(height, width)/2-1*margin-margin
|
||||
can.page.style(can, can.ui.content, html.HEIGHT, can.ConfHeight(), html.WIDTH, width)
|
||||
can.ui.svg.Val(html.WIDTH, width), can.ui.svg.Val(html.HEIGHT, height)
|
||||
can._draw = function(which) { can.onimport._draw(can, width/2-margin/2, height/2-margin/2, r, margin, which) }, can._draw(can.db.which||0)
|
||||
return
|
||||
|
||||
var height = can.base.Max(can.ConfHeight(), can.ConfWidth()/2), margin = 10, r = height/2-1*margin-margin
|
||||
can.page.style(can, can.ui.display, html.WIDTH, can.ConfWidth()-height-1), can.ui.svg.Val(html.HEIGHT, height), can.ui.svg.Val(html.WIDTH, height)
|
||||
can._draw = function(which) { can.onimport._draw(can, height/2-margin/2, can.ConfHeight()/2-margin/2, r, margin, which) }, can._draw(can.db.which||0)
|
||||
|
@ -1,12 +1,15 @@
|
||||
Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { can.page.requireDraw(can, function() { msg.append && can.ConfDefault({field: msg.append[0], split: nfs.PS})
|
||||
Volcanos(chat.ONIMPORT, {
|
||||
_init: function(can, msg, cb) { can.page.requireDraw(can, function() { msg.append && can.ConfDefault({field: msg.append[0], split: nfs.PS})
|
||||
can.db.count = msg.Length()
|
||||
can.onmotion.toggle(can, can._action, true)
|
||||
can.dir_root = can.Conf(nfs.DIR_ROOT)||msg.Option(nfs.DIR_ROOT), can._tree = can.onimport._tree(can, msg.Table(), can.Conf(mdb.FIELD), can.Conf(lex.SPLIT))
|
||||
can.onaction.list = [], can.base.isFunc(cb) && cb(msg), can.onimport.layout(can), can.onmotion.toggle(can, can._action, true)
|
||||
can.onappend._status(can, msg.Option(ice.MSG_STATUS))
|
||||
can.onaction.list = [], can.base.isFunc(cb) && cb(msg), can.onappend._status(can, msg.Option(ice.MSG_STATUS)), can.onimport.layout(can)
|
||||
can.onappend.style(can, "spides")
|
||||
}) },
|
||||
_tree: function(can, list, field, split) { var node = {}; can.core.List(list, function(item) { can.core.List(item[field].split(split), function(value, index, array) {
|
||||
var last = array.slice(0, index).join(split)||can.dir_root, name = array.slice(0, index+1).join(split)
|
||||
value && !node[name] && (node[last] = node[last]||{name: last, meta: {}, list: []}).list.push(node[name] = {
|
||||
name: value+(index==array.length-1? "": split), file: item[field]||item.file, hide: true, meta: item, list: [], last: node[last],
|
||||
name: value+(index==array.length-1? "": split), file: item.file||item[field]||item.file, hide: true, meta: item, list: [], last: node[last],
|
||||
})
|
||||
}) }); return node },
|
||||
_height: function(can, tree) { tree.height = 0; if (tree.list.length == 0 || tree.hide) { return tree.height = 1 }
|
||||
@ -15,7 +18,9 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { can.page.requireDraw(ca
|
||||
_width: function(can, tree) { tree.width = 0; if (tree.list.length == 0 || tree.hide) {
|
||||
return tree.width = can.onimport.draw(can, {shape: html.TEXT, points: [{x: 0, y: 0}], style: {inner: tree.name}}).Val(svg.TEXT_LENGTH)+can.margin
|
||||
} can.core.List(tree.list, function(item) { tree.width += can.onimport._width(can, item) }); return tree.width },
|
||||
_color: function(can, tree) { return tree.meta.color || (tree.list == 0? cli.PURPLE: cli.YELLOW) },
|
||||
_color: function(can, tree) {
|
||||
return tree.meta.color || (tree.list == 0? cli.PURPLE: cli.YELLOW)
|
||||
},
|
||||
layout: function(can) {
|
||||
can.ui.svg && can.ui.svg.Val(svg.FONT_SIZE, can.size = parseInt(can.Action(html.SIZE)||24)), can.margin = parseInt(can.Action(html.MARGIN)||10)
|
||||
can._tree && can._tree[can.dir_root] && can.core.CallFunc(can.onaction[can.Action(html.VIEW)||"横向"], [event, can, can.Action(html.VIEW)])
|
||||
@ -59,8 +64,26 @@ Volcanos(chat.ONDETAIL, {
|
||||
for (var node = tree; node; node = node.last) { can.request(event, node.meta) }
|
||||
can.run(can.request(event, can.Option()), can.base.Obj(can.Conf(lex.PREFIX), []).concat(can.Conf(ctx.ACTION)||[], [tree.file||"", tree.name]), function(msg) {
|
||||
if (msg.Length() == 0) { return can.onappend._float(can, web.CODE_INNER, [can._msg.Option(nfs.DIR_ROOT), tree.file, tree.line]) }
|
||||
if (msg.Append(mdb.INDEX)) { return msg.Table(function(value) { can.onappend._float(can, value.index, value.args) }) }
|
||||
if (msg.Append(mdb.INDEX)) {
|
||||
return msg.Table(function(value) { value.style = html.FLOAT, can.onappend.plugin(can, value, function(sub) {}) })
|
||||
}
|
||||
can.Status(mdb.COUNT, can.db.count += msg.Length())
|
||||
tree.list = can.onimport._tree(can, msg.Table(), can.Conf(mdb.FIELD), can.Conf(lex.SPLIT))[can.dir_root].list
|
||||
tree.hide = false, can.onimport.layout(can)
|
||||
}, true)
|
||||
},
|
||||
oncontextmenu: function(event, can, tree) {
|
||||
can.user.carte(event, can, {}, [
|
||||
wiki.PORTAL, chat.DESKTOP, chat.ADMIN, wiki.WORD, web.DREAM, web.STORE,
|
||||
code.VIMER, code.STATUS, code.COMPILE, cli.RUNTIME, code.XTERM,
|
||||
], function(event, button) {
|
||||
if (button == web.ADMIN) {
|
||||
can.onappend.plugin(can, {index: web.CHAT_IFRAME, args: [
|
||||
can.misc.MergePodCmd(can, {pod: tree.file, cmd: web.ADMIN})
|
||||
], title: tree.name+"."+web.ADMIN, style: html.FLOAT}, function(sub) {})
|
||||
} else {
|
||||
can.onappend.plugin(can, {space: tree.file, index: button, style: html.FLOAT}, function(sub) {})
|
||||
}
|
||||
})
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONEXPORT, {list: [mdb.TIME, mdb.COUNT]})
|
||||
|
81
plugin/story/weight.js
Normal file
81
plugin/story/weight.js
Normal file
@ -0,0 +1,81 @@
|
||||
Volcanos(chat.ONIMPORT, {
|
||||
_init: function(can, msg, cb) { can.ui = can.onappend.layout(can)
|
||||
can.page.requireDraw(can, function() { can.db.delay = 50, can.onappend.style(can, "pie"), can.onaction.list = []
|
||||
can.list = can.onimport._data(can, msg, can.Conf(mdb.FIELD)||msg.append[1]||mdb.VALUE)
|
||||
can.core.List(can.list, function(item) { msg.Push("weight", item.value.weight = parseInt(item.span*100/360)+"%").Push(cli.COLOR, '<span style="background-color:'+item.color+'"> </span>') })
|
||||
can.onappend.table(can, msg, null, can.ui.profile), can.page.Select(can, can.ui.profile, html.TR, function(tr, index) { can.ui.table = tr.parentNode
|
||||
can.page.Modify(can, tr, {onmouseenter: function(event) { can._draw(can.db.which = index-1) }})
|
||||
}), can.base.isFunc(cb) && cb(msg), can.onappend._status(can, msg.append)
|
||||
})
|
||||
},
|
||||
_data: function(can, msg, field) { var list = []
|
||||
var color = [
|
||||
"#8085e9",
|
||||
"#95a2ff",
|
||||
"#73abf5",
|
||||
"#3cb9fc",
|
||||
"#0082fc",
|
||||
"#87e885",
|
||||
"#90ed7d",
|
||||
"#22ed7c",
|
||||
"#05f8d6",
|
||||
"#cb9bff",
|
||||
"#bf19ff",
|
||||
"#f47a75",
|
||||
"#fa8080",
|
||||
"#f7a35c",
|
||||
"#ffc076",
|
||||
"#f9e264",
|
||||
"#fae768",
|
||||
"#5f45ff",
|
||||
"#02cdff",
|
||||
"#0090ff",
|
||||
"#854cff",
|
||||
"#09b0d3",
|
||||
"#1d27c9",
|
||||
"#765005",
|
||||
"#314976",
|
||||
"#009db2",
|
||||
"#024b51",
|
||||
"#0780cf",
|
||||
]
|
||||
var total = 0; msg.Table(function(value) { total += can.onimport._parseInt(can, value[field]) })
|
||||
var begin = 0; msg[cli.COLOR] = [], msg["weight"] = [], msg.Table(function(value, index) {
|
||||
list.push({span: can.onimport._parseInt(can, value[field])/total*360, color: color[index%color.length], value: value})
|
||||
}); return list
|
||||
},
|
||||
_draw: function(can, x, y, r, margin, which) { if (which == can._last) { return } can._last = which
|
||||
if (can.list.length == 1) { return can.onimport.draw(can, {shape: svg.CIRCLE, points: [{x: x, y: y}, {x: x, y: y+r}], style: {fill: cli.BLUE}}) }
|
||||
function pos(x, y, r, angle) { angle -= 90; return [x + r * Math.cos(angle * Math.PI / 180), y + r * Math.sin(angle * Math.PI / 180)] }
|
||||
function pie(x, y, r, begin, span, color, title, cb) { can.onimport.draw(can, {shape: svg.PATH, style: kit.Dict(
|
||||
svg.STROKE, color, svg.FILL, color, "d", can.base.joins([
|
||||
["M", x, y], ["L"].concat(pos(x, y, r, begin)), ["A", r, r, "0", span>180? "1": "0", "1"].concat(pos(x, y, r, begin+span)), ["Z"]
|
||||
], lex.SP, mdb.FS),
|
||||
), onmouseenter: function(event) { can.base.isFunc(cb) && cb(event) } }) }
|
||||
can.onmotion.clear(can, can.ui.svg), can.ui.svg.Value(mdb.COUNT, 0)
|
||||
var begin = 0; can.core.Next(can.list, function(item, next, index) { var p = index==which? pos(x, y, 1*margin, begin+item.span/2): [x, y]
|
||||
if (item.value.name == "rest") { return can.onmotion.delay(can, next, can.db.delay) }
|
||||
pie(p[0], p[1], r, begin, item.span, item.color, item.name||item.command, function(event) { can.onimport._draw(can, x, y, r, margin, can.db.which = index) }), begin += item.span
|
||||
index == which && (can.db.current = item.value)
|
||||
can.onmotion.select(can, can.ui.table, html.TR, index), can.Status(item.value), can.onmotion.delay(can, next, can.db.delay)
|
||||
}, function() {
|
||||
can.onmotion.select(can, can.ui.table, html.TR, which), can.Status(can.db.current), can.db.delay = 0
|
||||
})
|
||||
},
|
||||
_parseInt: function(can, value) { value = value.toLowerCase()
|
||||
if (can.base.endWith(value, "m")) { return parseInt(value)*1000000 }
|
||||
if (can.base.endWith(value, "g")) { return parseInt(value)*1000000000 }
|
||||
if (can.base.endWith(value, "gi")) { return parseInt(value)*1000000000 }
|
||||
if (can.base.endWith(value, "mi")) { return parseInt(value)*1000000 }
|
||||
return parseInt(value)
|
||||
},
|
||||
layout: function(can) { if (!can.ui || !can.ui.svg) { return }
|
||||
can.onmotion.hidden(can, can.ui.project), can.onmotion.hidden(can, can.ui.display), can.onmotion.toggle(can, can.ui.profile, true)
|
||||
var _width = can.base.Max(can.ConfWidth()-can.ConfHeight(), 600, 200)
|
||||
can.page.style(can, can.ui.profile, html.HEIGHT, can.ConfHeight(), html.WIDTH, _width, html.FLEX, "0 0 "+(_width)+"px")
|
||||
var width = can.ConfWidth()-_width, height = can.ConfHeight()-4, margin = 40, r = can.base.Max(height, width)/2-1*margin-margin
|
||||
can.page.style(can, can.ui.content, html.HEIGHT, can.ConfHeight(), html.WIDTH, width)
|
||||
can.ui.svg.Val(html.WIDTH, width), can.ui.svg.Val(html.HEIGHT, height)
|
||||
can._draw = function(which) { can.onimport._draw(can, width/2-margin/2, height/2-margin/2, r, margin, which) }, can._draw(can.db.which||-1)
|
||||
},
|
||||
})
|
@ -12,17 +12,20 @@ Volcanos(chat.ONIMPORT, {
|
||||
},
|
||||
card: function(can, msg, target, filter) { target = target||can.ui.content||can._output
|
||||
can.page.Append(can, target, msg.Table(function(value) { if (filter && filter(value)) { return }
|
||||
var img = can.misc.Resource(can, value.icon = value.icons||value.icon||value.image)
|
||||
var img = can.misc.ResourceIcons(can, value.icon = value.icons||value.icon||value.image)
|
||||
return {view: [[html.ITEM, value.type, value.status, "s-"+value.name]], list: [
|
||||
{view: [wiki.TITLE, html.DIV], list: [
|
||||
value.icon && {className: can.base.contains(img, ".jpg")? "jpg": "", img: img},
|
||||
img && {className: can.base.contains(img, ".jpg")? "jpg": "", img: img},
|
||||
{view: wiki.TITLE, list: [{text: value.name}, value.exists == "true" && {text: ["●", "", "exists"]}, can.onappend.label(can, value)]},
|
||||
]}, {view: [wiki.CONTENT, html.DIV, value.text]},
|
||||
{view: html.ACTION, inner: value.action, _init: function(target) { can.onappend.mores(can, target, value, html.CARD_BUTTON)
|
||||
can.page.Select(can, target, html.INPUT, function(target) { can.onappend.style(can, target.name, target) })
|
||||
}},
|
||||
]}
|
||||
})), can.onimport.layout = can.onimport.layout||function() { var height = can.onlayout.expand(can, target); can.sup.onexport.outputMargin = function() { return height } }
|
||||
})), can.onimport.layout = can.onimport.layout||function() {
|
||||
var height = can.onlayout.expand(can, target); can.sup.onexport.outputMargin = function() { return height }
|
||||
can.onmotion.delay(can, function() { can.onlayout.expand(can, target) })
|
||||
}
|
||||
},
|
||||
icon: function(can, msg, target, cb) { msg.Table(function(value) {
|
||||
var icon = can.misc.Resource(can, value.icons||value.icon||can.page.drawText(can, value.name, 80), value.space||msg.Option(ice.MSG_USERPOD), msg.Option(ice.MSG_USERWEB))
|
||||
@ -123,18 +126,25 @@ Volcanos(chat.ONIMPORT, {
|
||||
can.user.carteItem(event, can, item)
|
||||
},
|
||||
_item: function(can, item, cb, cbs) {
|
||||
item._hash = item._hash||item.hash||item.zone||item.path||item.name
|
||||
item._hash = item._hash||item.sess||item.hash||item.zone||item.path||item.name
|
||||
item._hash && item._hash.replaceAll && (item._hash = item._hash.replaceAll(":", "_"))
|
||||
item._title = item._title||item.name||item.path||item.zone||item.hash
|
||||
item._select == undefined && can.db.hash[0] && (item._select = can.db.hash[0] == item._hash)
|
||||
if (typeof item._hash == code.OBJECT) { item._select = true
|
||||
for (var i = 0; i < item._hash.length; i++) {
|
||||
if (item._hash[i] != can.db.hash[i]) { item._select = false; break }
|
||||
}
|
||||
}
|
||||
return {view: [[html.ITEM, item.type, item.role, item.status]], title: item.title||item.nick, list: [
|
||||
can.onimport._icons(can, item),
|
||||
].concat(can.onimport._nick(can, item), item._label||[], [
|
||||
item.action && {icon: "bi bi-three-dots", onclick: function(event) { can.onimport._menu(event, can, item, cbs) }},
|
||||
(item.action||cbs) && {icon: "bi bi-three-dots", onclick: function(event) { can.onimport._menu(event, can, item, cbs) }},
|
||||
]), _init: function(target) { target._item = item, item._item = target, can.ui[item.path] = target
|
||||
item._select && can.onmotion.delay(can, function() { target.click() })
|
||||
}, onclick: function(event) {
|
||||
can.db.value = item, can.onexport.hash(can, item._hash), can.onexport.title(can, item._title)
|
||||
cb(event)
|
||||
if (cb(event)) { return }
|
||||
can.db.value = item, can.onexport.hash(can, item._hash)
|
||||
item.__title? can.user.title(item.__title): can.onexport.title(can, item._title)
|
||||
}, oncontextmenu: function(event) {
|
||||
can.onimport._menu(event, can, item, cbs)
|
||||
}}
|
||||
@ -143,7 +153,8 @@ Volcanos(chat.ONIMPORT, {
|
||||
return can.page.Append(can, _target||can.ui.project||can._output, [can.onimport._item(can, item, function(event) { var target = event.currentTarget
|
||||
can.onmotion.select(can, target.parentNode, html.DIV_ITEM, target)
|
||||
can.onengine.signal(can, "onproject", can.request(event, {type: "item", query: can.page.getquery(can, can._fields)+","+item.path}))
|
||||
var show = target._list && can.onmotion.toggle(can, target._list); if (show === false) { return } cb(event, item, show, target)
|
||||
var show = target._list && can.onmotion.toggle(can, target._list); if (show === false) { return true }
|
||||
return cb(event, item, show, target)
|
||||
}, cbs)])._target
|
||||
},
|
||||
_itemselect: function(can, target) {
|
||||
@ -155,8 +166,9 @@ Volcanos(chat.ONIMPORT, {
|
||||
if (!target._list) { target._list = can.page.insertBefore(can, [html.LIST], target.nextSibling, target.parentNode) }
|
||||
return can.page.Append(can, target._list, can.core.List(list, function(item) {
|
||||
return can.onimport._item(can, item, function(event) { var target = event.currentTarget
|
||||
if (target._list && target._list.childElementCount > 0 && target._list && can.onmotion.toggle(can, target._list) == false) { return }
|
||||
can.onimport._itemselect(can, target), cb && cb(event, item, target._list && true, target)
|
||||
if (target._list && target._list.childElementCount > 0 && target._list && can.onmotion.toggle(can, target._list) == false) { return true }
|
||||
if (cb && cb(event, item, target._list && true, target)) { return }
|
||||
can.onimport._itemselect(can, target)
|
||||
}, cbs)
|
||||
})), target._list
|
||||
},
|
||||
@ -224,10 +236,12 @@ Volcanos(chat.ONIMPORT, {
|
||||
index == 0 && can.onappend.plugin(can, value, function(sub) { can.db.value._content_plugin = sub, can.onimport.layout(can) }, can.ui.content)
|
||||
index == 1 && can.onappend.plugin(can, value, function(sub) {
|
||||
can.onmotion.toggle(can, can.ui.display, true)
|
||||
can.db.value._display_plugin = sub, can.onimport.layout(can) }, can.ui.display)
|
||||
can.db.value._display_plugin = sub, can.onimport.layout(can)
|
||||
}, can.ui.display)
|
||||
index == 2 && can.onappend.plugin(can, value, function(sub) {
|
||||
can.onmotion.toggle(can, can.ui.profile, true)
|
||||
can.db.value._profile_plugin = sub, can.onimport.layout(can) }, can.ui.profile)
|
||||
can.db.value._profile_plugin = sub, can.onimport.layout(can)
|
||||
}, can.ui.profile)
|
||||
can.onmotion.delay(can, function() { can.onimport.layout(can) })
|
||||
can.onmotion.delay(can, function() { can.onimport.layout(can) }, 100)
|
||||
can.onmotion.delay(can, function() { can.onimport.layout(can) }, 300)
|
||||
@ -281,7 +295,8 @@ Volcanos(chat.ONIMPORT, {
|
||||
}
|
||||
}
|
||||
sub._stacks_root.onexport.title(sub._stacks_root, current._name, can.ConfHelp(),
|
||||
can._msg.Option("_share_title")||(can._msg && can._msg.IsDetail()? can._msg.Append(html.TITLE)||can._msg.Append(mdb.NAME)||(can._msg.Append(UID)||"").slice(0, 6): "")||can.user.info.titles
|
||||
can._msg.Option("_share_title")||(can._msg && can._msg.IsDetail()? can._msg.Append(html.TITLE)||can._msg.Append(mdb.NAME)||(can._msg.Append(UID)||"").slice(0, 6): "")
|
||||
// ||can.user.info.titles
|
||||
)
|
||||
can.user.agent.init(can,
|
||||
can._msg.Option("_share_content")||(can._msg && can._msg.IsDetail()? can._msg.Append(html.CONTENT)||can._msg.Append(mdb.INFO)||"": "")||current.city_name+" "+current._street,
|
||||
@ -306,7 +321,8 @@ Volcanos(chat.ONIMPORT, {
|
||||
myPlugin: function(can, value, cb) {
|
||||
var key = [value.space||can.ConfSpace(), value.index||can.ConfIndex()].concat(value.args||"").join(",")
|
||||
var sup = can._stacks_root; sup._stacks = sup._stacks||{}; var sub = (sup._stacks[key]||[])[0]; if (sub) { return sub._select() }
|
||||
var _output = sup._target.parentNode; value.style = html.OUTPUT
|
||||
var _output = sup._target.parentNode; value.height = sup.ConfHeight(), value.width = sup.ConfWidth()
|
||||
value.style = html.OUTPUT
|
||||
sup.onappend.plugin(can._root.Action, value, function(sub) { can.onimport.myField(can, sub)
|
||||
sub.misc.localStorage(sub, [sub.ConfSpace(), sub.ConfIndex(), mdb.HASH].join(","), "")
|
||||
sub.onexport.output = function(_sub, msg) { _sub._stacks_current = sup._stacks[key] = [sub], _sub._stacks_root = sup, sub._select() }
|
||||
@ -341,10 +357,9 @@ Volcanos(chat.ONIMPORT, {
|
||||
}
|
||||
sub.onimport._field = function(msg) { var sup = sub; can.onmotion.clear(can, sub._output)
|
||||
msg.Table(function(value) { value.style = html.OUTPUT
|
||||
can.onappend.plugin(can, value, function(sub) {
|
||||
can.onimport.myField(can, sub)
|
||||
sub.onexport.output = function(_sub, msg) {
|
||||
can.onimport.myOption(sub)
|
||||
can.onappend.plugin(can, value, function(sub) { can.onimport.myField(can, sub)
|
||||
sub.onexport.output = function(_sub, msg) { can.onimport.myOption(sub)
|
||||
can.user.isMobile && sub.onimport.size(sub, window.innerHeight-ACTION_HEIGHT, window.innerWidth, false)
|
||||
}
|
||||
var run = sub.run; sub.run = function(event, cmds, cb) {
|
||||
run(sub.request(event, {
|
||||
@ -360,6 +375,7 @@ Volcanos(chat.ONIMPORT, {
|
||||
if (sub._history.length > 1) { sub.request(event, {_toast: "reload"}); return sub.onimport.back(event, sub), cb && cb() }
|
||||
var _last = can._stacks_current.pop()
|
||||
can.onmotion.slideOut(_last, function() { var last = can._stacks_current[can._stacks_current.length-1]; last._select()
|
||||
can.onmotion.delay(can, function() { can._root.Action.onlayout._init(can) })
|
||||
last.request(event, {_toast: "reload"})
|
||||
if (last.ConfIndex().split(".").pop() == "message") { last.Update(event) }
|
||||
can._stacks_current.length == 1 && last._output.innerHTML == "" && last.Update(event)
|
||||
@ -371,7 +387,7 @@ Volcanos(chat.ONIMPORT, {
|
||||
}
|
||||
sub._select = function() { can.onimport.myOption(sub)
|
||||
can.page.SelectChild(can, _output, "*", function(target) { can.onmotion.toggle(can, target, target == sub._target) })
|
||||
var list = [can.page.button(can, can.user.trans(can, "", "返回"), function(event) { goback(event) }), can.page.button(can, can.user.trans(can, "reload", "刷新"), function(event) { reload(event) })]
|
||||
var list = [can.page.button(can, can.user.trans(can, "goback", "返回"), function(event) { goback(event) }), can.page.button(can, can.user.trans(can, "reload", "刷新"), function(event) { reload(event) })]
|
||||
can.page.Appends(can, _action, list), can.page.style(can, _action, html.DISPLAY, html.BLOCK)
|
||||
can.user.isMobile && sub.onimport.size(sub, window.innerHeight-ACTION_HEIGHT, window.innerWidth, false)
|
||||
}, sub._select()
|
||||
@ -439,7 +455,7 @@ Volcanos(chat.ONIMPORT, {
|
||||
authView: function(can, value) { return can.base.isIn(value.auth_status, "issued", "2") && {view: [aaa.AUTH, html.SPAN], list: [{icon: "bi bi-patch-check-fill", style: {color: "var(--notice-bg-color)"}}]} },
|
||||
timeView: function(can, value, key) {
|
||||
if (key) { return {text: [can.user.trans(can, key, null, html.INPUT)+": "+can.base.TimeTrim(value[key]), "", mdb.TIME]} }
|
||||
return {text: [can.base.TimeTrim(value[key]||value.updated_at||value.created_at||value.time), "", mdb.TIME]}
|
||||
return {text: [can.base.TimeTrim(value[key]||value.browse_time||value.updated_at||value.created_at||value.time), "", mdb.TIME]}
|
||||
},
|
||||
unitView: function(can, value, key, unit) { if (!value[key]) { return }
|
||||
return {text: [[can.user.trans(can, key, null, html.INPUT)+":", value[key]].concat(unit? [unit]: []).join(" "), "", key]}
|
||||
@ -456,6 +472,7 @@ Volcanos(chat.ONIMPORT, {
|
||||
if (value.Option) { return can.onappend._action(can, value.Option(ice.MSG_ACTION), target) }
|
||||
can.page.appendAction(can, value, target)
|
||||
can.page.Select(can, target, html.INPUT_BUTTON, function(target) {
|
||||
target.value = can.user.trans(can, target.name)
|
||||
if (filter.length > 0) {
|
||||
filter.indexOf(target.name) == -1 && can.page.Remove(can, target)
|
||||
} else {
|
||||
@ -476,9 +493,7 @@ Volcanos(chat.ONLAYOUT, {
|
||||
cmd: function(can, height, width) { can.onlayout._init(can, height, width) },
|
||||
})
|
||||
Volcanos(chat.ONEXPORT, {
|
||||
title: function(can, title) {
|
||||
can.sup.onexport.title.apply(can.sup.onexport, [can.sup].concat(can.core.List(arguments).slice(1)))
|
||||
},
|
||||
title: function(can, title) { can.sup.onexport.title.apply(can.sup.onexport, [can.sup].concat(can.core.List(arguments).slice(1))) },
|
||||
action_value: function(can, key, def) { var value = can.Action(key); return can.base.isIn(value, ice.AUTO, key, undefined)? def: value },
|
||||
tabs: function(can) {},
|
||||
tool: function(can) { can.misc.sessionStorage(can, [can.ConfIndex(), "tool"], JSON.stringify(can.page.Select(can, can._status, html.LEGEND, function(target) { return target._meta }))) },
|
||||
|
2
proto.js
2
proto.js
@ -115,7 +115,7 @@ var Volcanos = shy({iceberg: "", volcano: "", frame: chat.FRAME_JS, _cache: {},
|
||||
Mode: function(value) { return can.Conf(ice.MODE, value) },
|
||||
ConfDefault: function(value) { can.core.Item(value, function(k, v) { can.Conf(k) || can.Conf(k, v) }) },
|
||||
ConfSpace: function(space) { if (space) { can.Conf(web.SPACE, space) } return can.Conf("_space")||can.Conf(web.SPACE)||can.Conf("pod")||"" },
|
||||
ConfIndex: function(index) { if (index) { can.Conf(ctx.INDEX, index) } return can.Conf("_command")||can.Conf(ctx.INDEX)||can.Conf("_index") },
|
||||
ConfIndex: function(index) { if (index) { can.Conf(ctx.INDEX, index) } return can.Conf("_command")||can.Conf(ctx.INDEX)||can.Conf("_index")||"can" },
|
||||
ConfIcons: function() { return can.Conf(mdb.ICONS) },
|
||||
ConfHeight: function(value) { return can.Conf(html.HEIGHT, value) },
|
||||
ConfWidth: function(value) { return can.Conf(html.WIDTH, value)||can._output.offsetWidth },
|
||||
|
Loading…
x
Reference in New Issue
Block a user