1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-26 01:04:06 +08:00

opt frame.js

This commit is contained in:
harveyshao 2022-10-25 21:32:57 +08:00
parent 307c9a1703
commit 40eba0d9ad
12 changed files with 398 additions and 617 deletions

928
frame.js

File diff suppressed because it is too large Load Diff

View File

@ -16,6 +16,11 @@ Volcanos("page", {help: "用户界面", ClassList: {
return (this.has(can, obj, key)? this.del(can, obj, key): this.add(can, obj, key)).indexOf(key) > -1 return (this.has(can, obj, key)? this.del(can, obj, key): this.add(can, obj, key)).indexOf(key) > -1
}, },
}, },
SelectChild: function(can, target, key, cb) { var i = 0
return can.page.Select(can, target, key, function(node) {
if (node.parentNode == target) { return cb(node, i++) }
})
},
SelectArgs: function(can, option, key, cb) { SelectArgs: function(can, option, key, cb) {
if (can.base.isUndefined(key)) { var value = {} if (can.base.isUndefined(key)) { var value = {}
can.page.SelectArgs(can, option, "", function(item) { can.page.SelectArgs(can, option, "", function(item) {

View File

@ -148,7 +148,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: {
}); can.onmotion.story.auto(can, ui._target) }); can.onmotion.story.auto(can, ui._target)
can.onengine.signal(can, chat.ONTOAST, can.request({}, {time: can.misc._time(), title: meta.title, content: meta.content, fileline: can.misc.FileLine(2, 2)})) can.onengine.signal(can, chat.ONTOAST, can.request({}, {time: can.misc._time(), title: meta.title, content: meta.content, fileline: can.misc.FileLine(2, 2)}))
return !meta.action && can.onmotion.float.add(can, chat.TOAST, action), action return action
}, },
share: function(can, msg, cmd) { share: function(can, msg, cmd) {
can.run(msg, cmd||[ctx.ACTION, chat.SHARE], function(msg) { can.run(msg, cmd||[ctx.ACTION, chat.SHARE], function(msg) {
@ -256,6 +256,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: {
} }] } } }] }
}) }] ) }) }] )
parent || can.page.Select(can, document.body, can.page.Keys("div.carte.float"), function(target) { can.page.Remove(can, target) })
can.page.ClassList.add(can, ui._target, chat.FLOAT) can.page.ClassList.add(can, ui._target, chat.FLOAT)
ui._target.onmouseover = function(event) { can.onkeymap.prevent(event) } ui._target.onmouseover = function(event) { can.onkeymap.prevent(event) }
var carte = {_target: ui._target, _parent: parent, layout: can.onlayout.figure(event, can, ui._target)} var carte = {_target: ui._target, _parent: parent, layout: can.onlayout.figure(event, can, ui._target)}
@ -383,6 +384,21 @@ Volcanos("user", {help: "用户操作", info: {}, agent: {
downloads: function(can, text, name, ext) { if (!text) { return } downloads: function(can, text, name, ext) { if (!text) { return }
return can.user.download(can, URL.createObjectURL(new Blob([text])), name, ext) return can.user.download(can, URL.createObjectURL(new Blob([text])), name, ext)
}, },
toimage: function(event, can, name, target, silent) {
can.require(["https://cdn.jsdelivr.net/npm/html2canvas@1.0.0-rc.5/dist/html2canvas.min.js"], function() {
html2canvas(target||can._target).then(function (canvas) { var url = canvas.toDataURL("image/png")
if (silent) { return can.user.download(can, url, name, "png") }
var toast = can.user.toast(can, {content: {img: url, style: {"max-height": 240, display: html.BLOCK}}, duration: -1,
action: shy({}, [cli.CLOSE, "download"], function(event, button) {
can.user.input(event, can, [{name: mdb.NAME, value: name}], function(list) { toast.close()
can.user.download(can, url, list[0], "png")
})
}),
})
})
})
},
camera: function(can, msg, cb) { camera: function(can, msg, cb) {
navigator.getUserMedia({video: true}, cb, function(error) { navigator.getUserMedia({video: true}, cb, function(error) {
can.misc.Log(error) can.misc.Log(error)

View File

@ -50,7 +50,7 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) { can.onkeymap._build(can)
b: function(event, can) { can.search(event, ["Header.onaction.black"]) }, b: function(event, can) { can.search(event, ["Header.onaction.black"]) },
w: function(event, can) { can.search(event, ["Header.onaction.white"]) }, w: function(event, can) { can.search(event, ["Header.onaction.white"]) },
c: function(event, can) { can.onmotion.toimage(event, can, can.user.title(), can._target.parentNode, true) }, c: function(event, can) { can.user.toimage(event, can, can.user.title(), can._target.parentNode, true) },
":": function(event, can) { can.onengine.signal(can, chat.ONCOMMAND_FOCUS), can.onkeymap.prevent(event) }, ":": function(event, can) { can.onengine.signal(can, chat.ONCOMMAND_FOCUS), can.onkeymap.prevent(event) },
" ": function(event, can) { can.onengine.signal(can, chat.ONSEARCH_FOCUS), can.onkeymap.prevent(event) }, " ": function(event, can) { can.onengine.signal(can, chat.ONSEARCH_FOCUS), can.onkeymap.prevent(event) },

View File

@ -53,9 +53,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
_time: function(can, target) { _time: function(can, target) {
can.core.Timer({interval: 500}, function() { can.onimport.time(can, target) }) can.core.Timer({interval: 500}, function() { can.onimport.time(can, target) })
can.onappend.figure(can, {action: "date", style: {"min-width": 306}, _init: function(sub) { can.onappend.figure(can, {action: "date", style: {"min-width": 306}}, target), target.onmouseenter = target.click
can.getActionSize(function(msg, top) { can.page.style(can, sub._target, {top: top, right: 0, left: ""}) })
}}, target), target.onmouseenter = target.click
}, },
time: function(can, target) { time: function(can, target) {
can.onimport.topic(can), target.innerHTML = can.user.time(can, null, "%w %H:%M:%S") can.onimport.topic(can), target.innerHTML = can.user.time(can, null, "%w %H:%M:%S")
@ -148,6 +146,7 @@ Volcanos(chat.ONACTION, {help: "交互数据",
can.onimport.topic(can) can.onimport.topic(can)
}, },
onmain: function(can, msg) { onmain: function(can, msg) {
can.setHeader(chat.TOPIC)
can.run({}, [], function(msg) { can.run({}, [], function(msg) {
if (!can.Conf(aaa.USERNICK, msg.Option(aaa.USERNICK)||msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME))) { if (!can.Conf(aaa.USERNICK, msg.Option(aaa.USERNICK)||msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME))) {
msg.Option(chat.SSO)? can.user.jumps(msg.Option(chat.SSO)): can.user.login(can, function() { msg.Option(chat.SSO)? can.user.jumps(msg.Option(chat.SSO)): can.user.login(can, function() {
@ -182,6 +181,9 @@ Volcanos(chat.ONACTION, {help: "交互数据",
}) })
}) })
}, },
onshare: function(can, msg, args) {
can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(args||[]))
},
title: function(event, can) { title: function(event, can) {
var args = {}; can.core.List([chat.TITLE, chat.TOPIC], function(key) { var value = can.misc.Search(can, key); value && (args[key] = value) }) var args = {}; can.core.List([chat.TITLE, chat.TOPIC], function(key) { var value = can.misc.Search(can, key); value && (args[key] = value) })
@ -192,7 +194,7 @@ Volcanos(chat.ONACTION, {help: "交互数据",
white: function(event, can, button) { can.onimport.topic(can, button), can.onlayout._init(can) }, white: function(event, can, button) { can.onimport.topic(can, button), can.onlayout._init(can) },
print: function(event, can, button) { can.onimport.topic(can, [chat.WHITE, button]), can.onengine.signal(can, chat.ONPRINT) }, print: function(event, can, button) { can.onimport.topic(can, [chat.WHITE, button]), can.onengine.signal(can, chat.ONPRINT) },
webpack: function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) }, webpack: function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) },
toimage: function(event, can) { can.onmotion.toimage(event, can, can.user.title(), can._target.parentNode) }, toimage: function(event, can) { can.user.toimage(event, can, can.user.title(), can._target.parentNode) },
carte: function(event, can, list, cb) { can.user.carte(event, can, can.onaction, list, cb) }, carte: function(event, can, list, cb) { can.user.carte(event, can, can.onaction, list, cb) },
share: function(event, can, args) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(args||[])) }, share: function(event, can, args) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(args||[])) },

View File

@ -1,27 +1,16 @@
Volcanos(chat.ONACTION, {help: "控件交互", _init: function(can, meta, cb, target) { Volcanos(chat.ONACTION, {
can.base.isFunc(cb) && cb(); switch (meta.type) { _init: function(can, meta, target) { meta.type == html.BUTTON && meta.action == ice.AUTO && !can.sup._delay_init && target.click() },
case html.SELECT: meta.value && (target.value = meta.value); break run: function(event, can) { can.run(can.request(event, {_toast: ice.PROCESS})) },
case html.BUTTON: !can.sup._delay_init && meta.action == ice.AUTO && target.click(); break
}
},
run: function(event, can) { can.run(can.request(event, {_toast: "执行中..."})) },
list: function(event, can) { can.sup.Conf("mode") != "simple" && can.run(event) }, list: function(event, can) { can.sup.Conf("mode") != "simple" && can.run(event) },
back: function(event, can) { can.sup.onimport._back(can.sup) }, back: function(event, can) { can.sup.onimport._back(can.sup) },
refresh: function(event, can) { can.run(event) }, refresh: function(event, can) { can.run(event) },
onclick: function(event, can) { can.sup.request(event, {_toast: "执行中..."}) onclick: function(event, can) { can.Conf(mdb.TYPE) == html.BUTTON && can.run(can.request(event, {_toast: ice.PROCESS}), [ctx.ACTION, can.Conf(mdb.NAME)].concat(can.sup.Input())) },
can.Conf(mdb.TYPE) == html.BUTTON && can.run(event, [ctx.ACTION, can.Conf(mdb.NAME)].concat(can.sup.Input())) onchange: function(event, can) { can.Conf(mdb.TYPE) == html.SELECT && can.run(can.request(event, {_toast: ice.PROCESS})) },
},
onchange: function(event, can) { can.sup.request(event, {_toast: "执行中..."})
if (can.Conf(mdb.TYPE) == html.SELECT) { can.run(event) }
},
onkeydown: function(event, can) { can.onkeymap.input(event, can, event.target) onkeydown: function(event, can) { can.onkeymap.input(event, can, event.target)
if (can.Conf(mdb.TYPE) == html.TEXTAREA) { if (!event.ctrlKey) { return } } if (can.Conf(mdb.TYPE) == html.TEXTAREA) { if (!event.ctrlKey) { return } }
if (event.key == lang.ENTER) { if (event.key == lang.ENTER) { return can.run(event), can.onmotion.focus(can, event.target), can.onkeymap.prevent(event) }
can.run(event), can.onmotion.focus(can, event.target) if (!event.ctrlKey) { return }
can.onkeymap.prevent(event)
} if (!event.ctrlKey) { return }
switch (event.key) { switch (event.key) {
case "b": can.CloneInput(); break case "b": can.CloneInput(); break
case "m": can.CloneField(); break case "m": can.CloneField(); break

View File

@ -66,6 +66,6 @@ Volcanos(chat.ONFIGURE, {key: {
switch (event.key) { switch (event.key) {
case ice.PS: can.onfigure.key._load(event, sub, sub._cbs, target, meta.name, event.target.value); break case ice.PS: can.onfigure.key._load(event, sub, sub._cbs, target, meta.name, event.target.value); break
} }
can.onmotion.selectInputTable(event, sub, function() { can.onfigure.key._load(event, sub, sub._cbs, target, meta.name) }, target) can.onkeymap.selectInputs(event, sub, function() { can.onfigure.key._load(event, sub, sub._cbs, target, meta.name) }, target)
}, },
}}) }})

View File

@ -407,7 +407,7 @@ Volcanos(chat.ONDETAIL, {help: "组件详情", list: [cli.START, ice.RUN, ice.CO
can.onmotion.hidden(can, sub._legend), can.onmotion.toggle(can, can.ui.display, true) can.onmotion.hidden(can, sub._legend), can.onmotion.toggle(can, can.ui.display, true)
}, can.ui.display) }, can.ui.display)
}, },
toimage: function(event, can) { can.onmotion.toimage(event, can, can.Option(nfs.PATH).split(ice.PS).pop().split(ice.PT)[0], can.svg) }, toimage: function(event, can) { can.user.toimage(event, can, can.Option(nfs.PATH).split(ice.PS).pop().split(ice.PT)[0], can.svg) },
copy: function(event, can) { can.onfigure._copy(event, can, event.target) }, copy: function(event, can) { can.onfigure._copy(event, can, event.target) },
label: function(event, can) { var target = event.target label: function(event, can) { var target = event.target
var def = target.Value(mdb.TEXT); def && can.page.Select(can, can.svg, ice.PT+def, function(item) { def = item.Value(html.INNER) }) var def = target.Value(mdb.TEXT); def && can.page.Select(can, can.svg, ice.PT+def, function(item) { def = item.Value(html.INNER) })

View File

@ -95,7 +95,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
if (data[mdb.NAME] == html.INNER) { return can.onmotion.copy(can, target) } if (data[mdb.NAME] == html.INNER) { return can.onmotion.copy(can, target) }
can.page.Select(can, target, html.SPAN, function(item) { can.page.Select(can, target, html.SPAN, function(item) {
can.onmotion.copy(can, item, "", function(event) { can.onmotion.copy(can, item, function(event) {
can.runAction(event, mdb.CREATE, [mdb.TYPE, "spark", mdb.NAME, "shell", mdb.TEXT, item.innerText], function() {}) can.runAction(event, mdb.CREATE, [mdb.TYPE, "spark", mdb.NAME, "shell", mdb.TEXT, item.innerText], function() {})
}) })
}) })
@ -109,7 +109,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
} }
target.oncontextmenu = function(event) { target.oncontextmenu = function(event) {
can.user.carteClient(event, can, kit.Dict(mdb.EXPORT, function(event, can, button) { can.user.carteClient(event, can, kit.Dict(mdb.EXPORT, function(event, can, button) {
can.onmotion.toimage(event, can, "hi", target) can.user.toimage(event, can, "hi", target)
}), [mdb.EXPORT]) }), [mdb.EXPORT])
} }
}, },

View File

@ -141,7 +141,7 @@ Volcanos(chat.ONACTION, {list: [
] ]
can.user.copy(event, can, list[0]) can.user.copy(event, can, list[0])
}, },
"生成图片": function(event, can) { can.onmotion.toimage(event, can, can._name) }, "生成图片": function(event, can) { can.user.toimage(event, can, can._name) },
"打包页面": function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) }, "打包页面": function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) },
"保存参数": function(event, can) { can.search(event, ["River.ondetail.保存参数"]) }, "保存参数": function(event, can) { can.search(event, ["River.ondetail.保存参数"]) },

View File

@ -1,4 +1,4 @@
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) { can.onmotion.clear(can, target) Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.clear(can, target)
var cbs = can.onimport[can.Conf(ctx.STYLE)||msg.Option(ctx.STYLE)]; if (can.base.isFunc(cbs)) { var cbs = can.onimport[can.Conf(ctx.STYLE)||msg.Option(ctx.STYLE)]; if (can.base.isFunc(cbs)) {
can.core.CallFunc(cbs, {can: can, msg: msg, target: target}) can.core.CallFunc(cbs, {can: can, msg: msg, target: target})
can.page.ClassList.add(can, target, can._args[ctx.STYLE]) can.page.ClassList.add(can, target, can._args[ctx.STYLE])
@ -97,10 +97,10 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
zone._menu? can.user.carteRight(event, can, zone._menu.meta, zone._menu.list||can.core.Item(zone._menu.meta), function(event, button, meta) { zone._menu? can.user.carteRight(event, can, zone._menu.meta, zone._menu.list||can.core.Item(zone._menu.meta), function(event, button, meta) {
(meta[button]||can.onaction[button])(event, can, button) (meta[button]||can.onaction[button])(event, can, button)
}): can.user.carteRight(event, can, { }): can.user.carteRight(event, can, {
"刷新": function() { zone.refresh() }, "refresh": function() { zone.refresh() },
"折叠": function() { can.page.Select(can, zone._target, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, false) }) }, "fold": function() { can.page.Select(can, zone._target, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, false) }) },
"展开": function() { can.page.Select(can, zone._target, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, true) }) }, "expand": function() { can.page.Select(can, zone._target, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, true) }) },
}, ["刷新", "折叠", "展开"]) }, ["refresh", "fold", "expand"])
}}, }},
{view: html.ACTION, _init: function(target) { zone._action = target {view: html.ACTION, _init: function(target) { zone._action = target
can.onappend._action(can, [{input: html.TEXT, placeholder: "search", onkeyup: function(event) { can.onappend._action(can, [{input: html.TEXT, placeholder: "search", onkeyup: function(event) {
@ -177,13 +177,13 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}) })
}, },
}) })
Volcanos(chat.ONLAYOUT, {help: "界面布局", Volcanos(chat.ONLAYOUT, {
_init: function(can) { can.core.CallFunc([can.onimport, html.LAYOUT], {can: can}) }, _init: function(can) { can.core.CallFunc([can.onimport, html.LAYOUT], {can: can}) },
float: function(can) { can.onlayout._init(can) }, float: function(can) { can.onlayout._init(can) },
full: function(can) { can.onlayout._init(can) }, full: function(can) { can.onlayout._init(can) },
cmd: function(can) { can.onlayout._init(can) }, cmd: function(can) { can.onlayout._init(can) },
}) })
Volcanos(chat.ONEXPORT, {help: "导出数据", Volcanos(chat.ONEXPORT, {
table: function(can) { var msg = can._msg; if (msg.Length() == 0) { return } table: function(can) { var msg = can._msg; if (msg.Length() == 0) { return }
var res = [msg.append && msg.append.join(ice.FS)]; msg.Table(function(line, index, array) { var res = [msg.append && msg.append.join(ice.FS)]; msg.Table(function(line, index, array) {
res.push(can.core.Item(line, function(key, value) { return value }).join(ice.FS)) res.push(can.core.Item(line, function(key, value) { return value }).join(ice.FS))

View File

@ -210,6 +210,7 @@ var chat = {
ONMAIN: "onmain", ONLOGIN: "onlogin", ONSEARCH: "onsearch", ONMAIN: "onmain", ONLOGIN: "onlogin", ONSEARCH: "onsearch",
ONSIZE: "onsize", ONTOAST: "ontoast", ONREMOTE: "onremote", ONSIZE: "onsize", ONTOAST: "ontoast", ONREMOTE: "onremote",
ONSHARE: "onshare",
ONKEYUP: "onkeyup", ONKEYUP: "onkeyup",
ONRESIZE: "onresize", ONRESIZE: "onresize",
ONKEYDOWN: "onkeydown", ONMOUSEENTER: "onmouseenter", ORIENTATIONCHANGE: "orientationchange", ONKEYDOWN: "onkeydown", ONMOUSEENTER: "onmouseenter", ORIENTATIONCHANGE: "orientationchange",