1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 08:48:06 +08:00
This commit is contained in:
IT 老营长 @云轩领航-创始人 2023-10-09 13:07:10 +08:00
parent 4646f45cc2
commit 57f26fff6d
8 changed files with 53 additions and 47 deletions

View File

@ -570,12 +570,15 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) {
},
},
scrollHold: function(can, cb, target) { target = target || can._output; var left = target.scrollLeft; cb(), target.scrollLeft = left },
scrollIntoView: function(can, target) {
var offset = target.offsetTop - target.parentNode.scrollTop
can.core.Timer({interval: 10, length: offset/10}, function() {
target.parentNode.scrollTop += 10
scrollIntoView: function(can, target) { if (can._scroll) { return } can._scroll = true
var offset = target.offsetTop - target.parentNode.scrollTop, step = offset < 0? -20: 20
if (Math.abs(offset) > 1000) {
return target.parentNode.scrollTop = target.offsetTop, delete(can._scroll)
}
can.core.Timer({interval: 10, length: offset/step}, function() {
target.parentNode.scrollTop += step
}, function() {
target.parentNode.scrollTop = target.offsetTop
target.parentNode.scrollTop = target.offsetTop, delete(can._scroll)
})
},
clearFloat: function(can) {

View File

@ -532,9 +532,10 @@ body.windows fieldset.inner>div.output { overflow:hidden; }
body.windows fieldset.inner>div.output>div.layout>div.layout>div.profile { overflow:hidden; }
/* scrollbar */
div.scrollbar {
background-color:#0000ff66;
font-size:8px !important; line-height:10px;
border-radius:10px; position:absolute; visibility:hidden;
/* background-color:#0000ff66; */
background-color:var(--hover-bg-color);
font-size:8px !important; line-height:10px;
border-radius:10px; position:absolute; visibility:hidden;
}
div.scrollbar.vertical { writing-mode:tb; width:10px; right:0; top:0; transition:width .3s 1s; }
div.scrollbar.vertical:hover { width:30px; transition:width .1s; font-size:24px !important; }

View File

@ -125,9 +125,10 @@ Volcanos("user", {
function remove_sub(carte) { carte._sub && can.page.Remove(can, carte._sub._target), delete(carte._sub) } parent? remove_sub(parent): can.onmotion.clearCarte(can)
meta = meta||can.ondetail||can.onaction||{}, list = can.base.getValid(list, meta.list, can.core.Item(meta)), trans = trans||meta._trans; if (!list || list.length == 0) { return }
var _events = event._events||event
function click(event, button) { can.misc.Event(event, can, function() { can.request(event, {action: button}), can.onkeymap.prevent(event), event._events = _events
if (can.base.isFunc(cb) && cb(event, button, meta, carte)) { return }
(meta[button]? can.core.CallFunc([meta, button], {event: event, can: can, msg: msg, button: button}): can.Update(event, [ctx.ACTION, button])) || can.onmotion.clearCarte(can)
function click(event, button) { can.misc.Event(event, can, function() { can.request(event, {action: button}), can.onkeymap.prevent(event), event._events = _events;
(can.base.isFunc(cb)? cb(event, button, meta, carte):
meta[button]? can.core.CallFunc([meta, button], {event: event, can: can, msg: msg, button: button}):
can.Update(event, [ctx.ACTION, button])) || can.onmotion.clearCarte(can)
}) }
var isinput = can.page.tagis(event.target, html.INPUT)
var ui = can.page.Append(can, document.body, [{view: [[chat.CARTE, meta._style||can.base.replaceAll(can.ConfIndex()||"", nfs.PT, lex.SP)||"", chat.FLOAT]], list: can.core.List(list, function(item, index) {

View File

@ -1,7 +1,7 @@
Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.clear(can)
Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) {
if (can.Option(mdb.TYPE)) { return can.onimport[can.Option(mdb.TYPE)](can, msg, can.Option(mdb.FIELD)) }
can.ui = can.onlayout.display(can), can.table = can.onappend.table(can, msg, function(value, key, index, line) { return can.onimport._value(can, value) }, can.ui.content)
can.base.isFunc(cb) && cb(msg), can.onappend._status(can, msg.append), can.onaction._compute(event, can)
can.ui = can.onappend.layout(can), can.table = can.onappend.table(can, msg, function(value, key, index, line) { return can.onimport._value(can, value) }, can.ui.content)
cb && cb(msg), can.onappend._status(can, msg.append), can.onaction._compute(event, can)
},
_value: function(can, value) {
return {text: [value, html.TD], oncontextmenu: function(event) {
@ -19,7 +19,7 @@ Volcanos(chat.ONFIGURE, {
"最小": function(event, can, res, td, index) { (res[index] === undefined || parseFloat(td.innerText) < parseFloat(res[index])) && (res[index] = parseFloat(td.innerText)) },
"平均": function(event, can, res, td, index, cols, rows, nrow) { res[index] = parseFloat(td.innerText) + (res[index]||0); if (nrow == rows.length - 1) { res[index] = res[index] / nrow } },
})
Volcanos(chat.ONACTION, {list: [ice.SAVE,
Volcanos(chat.ONACTION, {list: [nfs.SAVE,
[ice.MODE, "全选", "多选", "块选", "反选", "拖动", "编辑"],
[ice.EXEC, "求和", "最大", "最小", "平均"],
],

View File

@ -3,7 +3,6 @@ fieldset.word>div.output>p { margin:20px auto; }
fieldset.word>div.output div.story.flex { display:flex; justify-content:center; }
fieldset.word>div.output div.story.flex>* { padding:20px; }
fieldset.word>div.output h2.story[data-type=spark][data-name=title] { text-align:center; }
// fieldset.word>div.output h2 { margin-top:40px; }
fieldset.word>div.output h3 { margin-top:20px; }
fieldset.word>div.output table { width:100%; }
fieldset.word>div.output img { max-height:100%; max-width:100%; }
@ -29,15 +28,13 @@ div.story[data-type=spark_tabs]>div.story:not(.select) { display:none; }
fieldset.word.play.float { top:0; }
fieldset.word.play.float>div.action { display:contents; }
fieldset.word.play.float>div.status { clear:none; }
fieldset.word.play.float>div.status { clear:none; display:contents; }
fieldset.word.play.float>div.output>div.project { background-color:#4682b46b; padding:10px; position:fixed; right:0; top:32px; z-index:10; }
fieldset.word.play.float div.content div.page { display:none; }
// fieldset.word.play.float div.content div.page { text-align:center; display:none; }
fieldset.word.play.float div.content div.page.show { display:block; }
fieldset.word.play.float div.content div.page ul { text-align:left; }
// fieldset.word.play.float div.content div.page fieldset { text-align:center; }
fieldset.word.play.float div.content.grid div.page { background-color:#a4cbecb5; margin:10px; height:320px; width:30%; overflow:auto; display:block; float:left; }
fieldset.word.play.float h1 { text-align:center; }
fieldset.word.play.float h2 { text-align:center; }
fieldset.word.play.float svg { display:block; margin:0 auto; }
fieldset.word.play.float h3 { text-align:center; }
fieldset.word.play.float svg { display:block; margin:0 auto; }

View File

@ -1,14 +1,14 @@
Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.Conf(html.PADDING, 10)
can.onmotion.clear(can), can.page.Modify(can, target, msg.Result()), can.onimport._display(can, target)
can.page.Modify(can, target, msg.Results()), can.onimport._content(can, target)
can.onmotion.delay(can, function() { can.onappend.scroll(can, can._output) })
},
_display: function(can, target, cb) { can.onappend.style(can, web.WIKI_WORD)
_content: function(can, target, cb) { can.onappend.style(can, web.WIKI_WORD)
can.page.Select(can, target, wiki.STORY_ITEM, function(target) { var meta = target.dataset||{}; cb && cb(target, meta)
can.core.CallFunc([can.onimport, can.onimport[meta.name]? meta.name: meta.type||target.tagName.toLowerCase()], [can, meta, target])
var _meta = can.base.Obj(meta.meta); _meta && _meta.style && can.page.style(can, target, can.base.Obj(_meta.style))
meta.style && can.page.style(can, target, can.base.Obj(meta.style))
})
can.page.Select(can, target, "a", function(target) {
can.page.Select(can, target, html.A, function(target) {
target.innerText = target.innerText || target.href, target.href = target.href || target.innerText, target.target = target || "_blank"
})
},
@ -16,20 +16,20 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.Conf(html.PADDI
nav = can.onmotion.clear(can, nav||can.page.insertBefore(can, [wiki.NAVMENU], can._output)), can.sup._navmenu = nav
can.onimport.list(can, can.base.Obj(meta.data), function(event, item) {
var link = item.meta.link; if (!link || link == can.Option(nfs.PATH)) { return false }
if (can.base.beginWith(link, web.HTTP, nfs.PS)) { return can.user.opens(link) }
if (can.onmotion.cache(can, function() { can.isCmdMode() && can.user.title(item.meta.name); return can.Option(nfs.PATH, link) })) { return }
if (can.base.beginWith(link, nfs.PS, web.HTTP)) { return can.user.opens(link) }
if (can.onmotion.cache(can, function() { return can.onexport.title(can, item.meta.name), can.Option(nfs.PATH, link) })) { return }
return can.sup.Update(event, [link])
}, nav)
can.onimport.layout(can)
},
premenu: function(can, meta, target) { can.page.Select(can, can._output, can.page.Keys(wiki.H2, wiki.H3), function(_target) {
can.onimport.item(can, {name: _target.innerHTML}, function() { _target.scrollIntoView() }, function() {}, target), _target.onclick = function(event) { target.scrollIntoView() }
premenu: function(can, meta, target) { can.page.Select(can, can._output, can.page.Keys(html.H2, html.H3), function(_target) {
can.onimport.item(can, {name: _target.innerHTML}, function() { can.onmotion.scrollIntoView(can, _target) }, function() {}, target)
_target.onclick = function(event) { can.onmotion.scrollIntoView(can, target) }
}) },
endmenu: function(can, meta, target) { can.page.Select(can, can._output, can.page.Keys(wiki.H2, wiki.H3), function(_target) {
can.onimport.item(can, {name: _target.innerHTML}, function() { _target.scrollIntoView() }, function() {}, target)
endmenu: function(can, meta, target) { can.page.Select(can, can._output, can.page.Keys(html.H2, html.H3), function(_target) {
can.onimport.item(can, {name: _target.innerHTML}, function() { can.onmotion.scrollIntoView(can, _target) }, function() {}, target)
}) },
title: function(can, meta, target) {
can.isCmdMode() && target.tagName == "H1" && can.user.title(meta.text)
},
title: function(can, meta, target) { can.page.tagis(target, html.H1) && can.onexport && can.onexport.title(can, meta.text) },
spark: function(can, meta, target) {
if (meta[mdb.NAME] == html.INNER) { return can.onmotion.copy(can, target) }
can.page.Select(can, target, "kbd,samp", function(item) { can.onmotion.copy(can, item, function() {
@ -46,6 +46,9 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.Conf(html.PADDI
field: function(can, meta, target) { var item = can.base.Obj(meta.meta), width = item.width
can.onappend.plugin(can, item, function(sub) { can._plugins = (can._plugins||[]).concat([sub])
sub.onimport.size(sub, can.base.Min(can.ConfHeight()/2, 300, 600), sub.Conf("_width", width)||(can.ConfWidth()-2*can.Conf(html.PADDING)), true)
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")
}
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")) })
}, can._output, target)
},
@ -64,19 +67,19 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.Conf(html.PADDI
})); can.page.style(can, ui._target, {left: event.clientX, top: event.clientY})
}) }
},
layout: function(can, height, width) { can.onmotion.delay(can, function() { padding = can.Conf(html.PADDING)
if (can.isCmdMode()) { can.ConfHeight(can.page.height()), can.ConfWidth(can.page.width()) }
if (can.sup._navmenu) { can.page.style(can, can.sup._navmenu, html.HEIGHT, can.ConfHeight())
can.page.style(can, can._output, html.HEIGHT, height, html.WIDTH, width = can.ConfWidth()-can.sup._navmenu.offsetWidth, "clear", "none", "float", "left")
layout: function(can) { can.onmotion.delay(can, function() { padding = can.Conf(html.PADDING)
if (can.isCmdMode()) { can.ConfHeight(can.page.height()-html.ACTION_HEIGHT-1), can.ConfWidth(can.page.width()) }
if (can.sup._navmenu) {
can.ConfWidth(can.ConfWidth()-can.sup._navmenu.offsetWidth)
can.page.style(can, can.sup._navmenu, html.HEIGHT, can.ConfHeight())
can.page.style(can, can._output, html.HEIGHT, can.ConfHeight(), html.WIDTH, can.ConfWidth(), "clear", "none", "float", "left")
} else {
can.isCmdMode() && can.page.styleHeight(can, can._output, "")
}
can.core.List(can._plugins, function(sub) { sub.onimport.size(sub, can.base.Min(can.ConfHeight()/2, 300, 600), sub.Conf("_width")||(can.ConfWidth()-2*padding), true) })
}, 100) },
}, 0) },
}, [""])
Volcanos(chat.ONACTION, {_trans: {view: "视图"},
onkeydown: function(event, can) { can.keylist = can.onkeymap._parse(event, can, "normal", can.keylist) },
Volcanos(chat.ONACTION, {
play: function(event, can) { var list = [], current = []
can.page.Select(can, can._output, wiki.STORY_ITEM, function(item) { can.page.tagis(item, "h1", "h2", "h3") && list.push(current = []), current.push(item) })
can.onappend._init(can, {type: "story word play float", height: can.page.height(), width: can.page.width(), padding: 10}, [], function(sub) { sub._legend.onclick = can._legend.onclick
@ -107,7 +110,7 @@ Volcanos(chat.ONACTION, {_trans: {view: "视图"},
}, can._root._target)
},
})
Volcanos(chat.ONDETAIL, {list: ["删除"],
Volcanos(chat.ONDETAIL, {
show: function(sub, which) { sub.page.styleClass(sub, sub.ui.content, chat.CONTENT)
sub.page.Select(sub, sub.ui.content, html.DIV_PAGE, function(page, index) {
if (index == which || page == which) {
@ -158,14 +161,13 @@ Volcanos(chat.ONDETAIL, {list: ["删除"],
})
Volcanos(chat.ONKEYMAP, {
_mode: {
normal: {
"n": function(event, can) { can.ondetail.next(can.sub) },
plugin: {
"j": function(event, can) { can.ondetail.next(can.sub) },
"k": function(event, can) { can.ondetail.prev(can.sub) },
"n": function(event, can) { can.ondetail.next(can.sub) },
"p": function(event, can) { can.ondetail.prev(can.sub) },
"ArrowRight": function(event, can) { can.ondetail.next(can.sub) },
"ArrowLeft": function(event, can) { can.ondetail.prev(can.sub) },
"k": function(event, can) { can.ondetail.prev(can.sub) },
"p": function(event, can) { can.ondetail.prev(can.sub) },
"q": function(event, can) { can.ondetail["结束"](event, can.sub) },
"h": function(event, can) { can.ondetail["隐藏"](event, can.sub) },
},

View File

@ -41,11 +41,13 @@ Volcanos(chat.ONIMPORT, {
can.page.Select(can, input.parentNode, "span.value", function(target) { target.innerText = value })
return input.value = value, can.Update(event, can.Input([], true), cb), input
})[0] },
_size: function(can, height, width, auto, mode) {},
size: function(can, height, width, auto, mode) {
can.Conf("_auto", auto), can.Mode(mode), can.ConfHeight(height), can.ConfWidth(width), height -= can.onexport.actionHeight(can)+can.onexport.statusHeight(can)
auto || auto == undefined? (can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, "", html.MAX_HEIGHT, height, html.MAX_WIDTH, width), can.page.style(can, can._target, html.HEIGHT, "", html.WIDTH, "")):
(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))
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
},
display_size: function(can, sub) { var border = 1

View File

@ -17,7 +17,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { can.page.requireDraw(ca
} 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) },
layout: function(can) {
// can.page.ClassList.has(can, can._fields, html.FLOAT) || can.page.style(can, can._output, html.MAX_HEIGHT, "")
// can.page.ClassList.has(can, can._fields, html.FLOAT) || can.page.style(can, can._output, html.MAX_HEIGHT, "", "overflow", "hidden")
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)])
},