1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 08:48:06 +08:00
This commit is contained in:
IT 老营长 @云轩领航-创始人 2024-09-18 20:40:50 +08:00
parent aec86f5d34
commit 5f3ccc5c65
3 changed files with 97 additions and 26 deletions

View File

@ -1,7 +1,7 @@
Volcanos(chat.ONENGINE, { Volcanos(chat.ONENGINE, {
_init: function(can, meta, list, cb, target) { _init: function(can, meta, list, cb, target) {
can.user.isMobile && (can.Inputs = can.page.Append(can, document.body, ["inputs"])._target)
can.Option = function() {}, can.run = function(event, cmds, cb) { var msg = can.request(event); cmds = cmds||[]; return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, can, cmds, cb) } can.Option = function() {}, can.run = function(event, cmds, cb) { var msg = can.request(event); cmds = cmds||[]; return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, can, cmds, cb) }
can.Inputs = can.page.Append(can, document.body, ["inputs"])._target
can.core.Next(list, function(item, next) { item.type = chat.PANEL can.core.Next(list, function(item, next) { item.type = chat.PANEL
can.onappend._init(can, item, item.list, function(sub) { can[item.name] = sub, sub.db = {}, sub.ui = {}, sub.db._boot = can.misc._time() can.onappend._init(can, item, item.list, function(sub) { can[item.name] = sub, sub.db = {}, sub.ui = {}, sub.db._boot = can.misc._time()
sub.run = function(event, cmds, cb) { var msg = sub.request(event); cmds = cmds||[]; return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, sub, cmds, cb) } sub.run = function(event, cmds, cb) { var msg = sub.request(event); cmds = cmds||[]; return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, sub, cmds, cb) }
@ -23,11 +23,9 @@ Volcanos(chat.ONENGINE, {
if (panel.onengine._plugin(event, can, msg, panel, cmds, cb)) { return } if (panel.onengine._plugin(event, can, msg, panel, cmds, cb)) { return }
if (panel.onengine._engine(event, can, msg, panel, cmds, cb)) { return } if (panel.onengine._engine(event, can, msg, panel, cmds, cb)) { return }
if (panel.onengine._static(event, can, msg, panel, cmds, cb)) { return } if (panel.onengine._static(event, can, msg, panel, cmds, cb)) { return }
var toast, _toast = msg.Option(chat._TOAST); if (_toast) { can.onmotion.delay(can, function() { var toast, _toast = msg.Option(chat._TOAST); if (_toast) { can.onmotion.delay(can, function() {
if (sub.__toast || sub._toast) { return } toast = toast||can.user.toastProcess(sub, _toast) if (sub.__toast || sub._toast) { return } toast = toast||can.user.toastProcess(sub, can.user.trans(sub, _toast))
}, 30) } }, 0) }
if (can.base.isUndefined(msg[ice.MSG_DAEMON])) { if (can.base.isUndefined(msg[ice.MSG_DAEMON])) {
can.base.isUndefined(sub._daemon) && can.ondaemon._list[0] && (sub._daemon = can.ondaemon._list.push(sub)-1) can.base.isUndefined(sub._daemon) && can.ondaemon._list[0] && (sub._daemon = can.ondaemon._list.push(sub)-1)
if (sub._daemon) { msg.Option(ice.MSG_DAEMON, can.core.Keys(can.ondaemon._list[0], sub._daemon)) } if (sub._daemon) { msg.Option(ice.MSG_DAEMON, can.core.Keys(can.ondaemon._list[0], sub._daemon)) }
@ -37,12 +35,7 @@ Volcanos(chat.ONENGINE, {
names = can.base.MergeURL(names, ice.MSG_INDEX, sub.ConfIndex()), can.page.exportValue(sub, msg) 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.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) { can.misc.Run(event, can, {names: names}, cmds, function(msg) {
// can.user.isMobile || toast && can.user.toastSuccess(msg._can, _toast), toast && toast.close && toast.close(), toast = true, delete(sub._toast), delete(sub.__toast)
toast && can.user.toastSuccess(msg._can, _toast)
toast && toast.close && toast.close(), toast = true
delete(sub._toast)
delete(sub.__toast)
can.base.isFunc(cb) && cb(msg), Volcanos.meta.pack[can.core.Keys(panel._name, cmds.join(mdb.FS))] = msg can.base.isFunc(cb) && cb(msg), Volcanos.meta.pack[can.core.Keys(panel._name, cmds.join(mdb.FS))] = msg
}) })
}, },
@ -376,12 +369,16 @@ Volcanos(chat.ONAPPEND, {
} msg.Defer(), can.base.isFunc(cb) && cb(msg) } msg.Defer(), can.base.isFunc(cb) && cb(msg)
can._output.scrollTop = output_old.scrollTop, can._output.scrollLeft = output_old.scrollLeft can._output.scrollTop = output_old.scrollTop, can._output.scrollLeft = output_old.scrollLeft
can.isCmdMode() && can.user.agent.init(can, can.user.info.titles) can.isCmdMode() && can.user.agent.init(can, can.user.info.titles)
sub.onmotion.touchAction(sub)
can.page.style(can, can._target, "visibility", ""), can.page.style(can, can._output, "visibility", "") can.page.style(can, can._target, "visibility", ""), can.page.style(can, can._output, "visibility", "")
if (!can.page.ClassList.has(can, can._target, "_back") && !can.page.ClassList.has(can, can._target, "_goto")) { if (!can.page.ClassList.has(can, can._target, "_back") && !can.page.ClassList.has(can, can._target, "_goto")) {
can.page.ClassList.del(can, can._output, "_prepare"), can.page.style(can, can._output, html.LEFT, 0) can.page.ClassList.del(can, can._output, "_prepare"), can.page.style(can, can._output, html.LEFT, 0)
can.page.Remove(can, output_old) can.page.Remove(can, output_old)
return return
} }
can.page.ClassList.del(can, can._output, "_prepare"), can.page.style(can, can._output, html.LEFT, 0)
can.page.Remove(can, output_old)
return
var width = can.ConfWidth(), begin = width-200; can.page.ClassList.add(can, output_old, "_unload") var width = can.ConfWidth(), begin = width-200; can.page.ClassList.add(can, output_old, "_unload")
can.core.Timer({length: (width-begin)/10, interval: 10}, function(timer, interval, index, list) { can.core.Timer({length: (width-begin)/10, interval: 10}, function(timer, interval, index, list) {
if (can.page.ClassList.has(can, can._target, "_back")) { if (can.page.ClassList.has(can, can._target, "_back")) {
@ -1310,11 +1307,17 @@ Volcanos(chat.ONMOTION, {
target.addEventListener("touchmove", function(event) { target.addEventListener("touchmove", function(event) {
if (Math.abs(event.touches[0].clientY - beginY) > Math.abs(event.touches[0].clientX - beginX)) { return } if (Math.abs(event.touches[0].clientY - beginY) > Math.abs(event.touches[0].clientX - beginX)) { return }
var left = event.touches[0].clientX - beginX + beginLeft; target._left = left var left = event.touches[0].clientX - beginX + beginLeft; target._left = left
if (beginLeft == 0 && left > 0) { return }
if (left < 0 && left > -max) { can.page.style(can, event.currentTarget, {left: left}) } if (left < 0 && left > -max) { can.page.style(can, event.currentTarget, {left: left}) }
can.onmotion.select(can, target.parentNode.parentNode, html.DIV_ITEM, target.parentNode) can.onmotion.select(can, target.parentNode.parentNode, html.DIV_ITEM, target.parentNode)
can.onkeymap.prevent(event) can.onkeymap.prevent(event)
}) })
target.addEventListener("touchend", function(event) { var left = target._left target.addEventListener("touchend", function(event) { var left = target._left
var msg = can.request(event)
if (event.currentTarget.offsetLeft < 0) {
if (msg.Option(ice.MSG_HANDLE) == ice.TRUE) { return } msg.Option(ice.MSG_HANDLE, ice.TRUE)
}
if (left < -max/2) { if (left < -max/2) {
can.page.style(can, event.currentTarget, {left: -max}) can.page.style(can, event.currentTarget, {left: -max})
} else { } else {
@ -1325,6 +1328,40 @@ Volcanos(chat.ONMOTION, {
}) })
}) })
}, },
touchAction: function(can, target) { target = target||can.ui.list||can.ui.output||can._output
var beginY = 0, beginX = 0, spanY = 0, spanX = 0, data
function direction() {
if (Math.abs(spanX) > Math.abs(spanY)) {
if (Math.abs(spanX) < 50) {
return "move"
} else if (spanX > 0) {
return "right"
} else {
return "left"
}
} else {
if (Math.abs(spanY) < 50) {
return "move"
} else if (spanY > 0) {
return "down"
} else {
return "up"
}
}
}
target.ontouchstart = function(event) {
beginY = event.touches[0].clientY, beginX = event.touches[0].clientX, spanY = 0, spanX = 0
}
target.ontouchmove = function(event) { var msg = can.request(event)
if (msg.Option(ice.MSG_HANDLE) == ice.TRUE) { return } msg.Option(ice.MSG_HANDLE, ice.TRUE)
spanY = event.touches[0].clientY-beginY, spanX = event.touches[0].clientX-beginX
can.onaction.onslidemove(event, can, data = {beginX: beginX, beginY: beginY, spanX: spanX, spanY: spanY}, direction())
}
target.ontouchend = function(event) { var msg = can.request(event)
if (msg.Option(ice.MSG_HANDLE) == ice.TRUE) { return } msg.Option(ice.MSG_HANDLE, ice.TRUE)
data && can.onaction["onslide"+direction()](event, can, data, direction(), target)
}
},
}) })
Volcanos(chat.ONKEYMAP, { Volcanos(chat.ONKEYMAP, {
_init: function(can, target) { target = target||document.body, can.onkeymap._build(can) _init: function(can, target) { target = target||document.body, can.onkeymap._build(can)

View File

@ -60,10 +60,10 @@ Volcanos(chat.ONACTION, {_trans: {input: {main: "程序", top: "顶域"}},
_runs: function(event, can, button, cb) { var meta = can.Conf(), msg = can.request(event); msg.Option(ctx.ACTION, button) _runs: function(event, can, button, cb) { var meta = can.Conf(), msg = can.request(event); msg.Option(ctx.ACTION, button)
can.user.input(event, can, meta.feature[button], function(data, args) { msg.Option(data), can.onaction._run(event, can, button, args, cb) }) can.user.input(event, can, meta.feature[button], function(data, args) { msg.Option(data), can.onaction._run(event, can, button, args, cb) })
}, },
save: function(event, can, button) { var p = can.Option(nfs.PATH)+can.Option(nfs.FILE); can.user.toastProcess(can, p, button) save: function(event, can, button) {
can.request(event, {file: can.Option(nfs.FILE), content: can.onexport.content(can)}) can.request(event, {file: can.Option(nfs.FILE), content: can.onexport.content(can), _toast: button})
can.onaction._run(event, can, button, [can.onexport.parse(can), can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) { can.onaction._run(event, can, button, [can.onexport.parse(can), can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) {
can.onaction.reload(can, msg), can.user.toastSuccess(can, p, button) can.onaction.reload(can, msg)
}) })
}, },
reload: function(can, msg) { reload: function(can, msg) {
@ -90,7 +90,7 @@ Volcanos(chat.ONACTION, {_trans: {input: {main: "程序", top: "顶域"}},
script: function(event, can, button) { can.onaction._runs(event, can, button) }, script: function(event, can, button) { can.onaction._runs(event, can, button) },
create: function(event, can, button) { can.onaction._runs(event, can, button) }, create: function(event, can, button) { can.onaction._runs(event, can, button) },
module: function(event, can, button) { can.onaction._runs(can.request(event, {title: can.user.trans(can, button, "创建模块")}), can, button) }, module: function(event, can, button) { can.onaction._runs(can.request(event, {title: can.user.trans(can, button, "创建模块")}), can, button) },
compile: function(event, can, button) { var msg = can.request(event); msg.Option(chat._TOAST, "") compile: function(event, can, button) { var msg = can.request(event, {_toast: button})
can.runAction(event, button, [], function(msg) { can.ui.search && can.ui.search.hidden() can.runAction(event, button, [], function(msg) { can.ui.search && can.ui.search.hidden()
if (msg.Length() > 0 || msg.Result()) { return can.onimport.exts(can, "inner/search.js", function(sub) { can.ui.search = sub, sub.select() if (msg.Length() > 0 || msg.Result()) { return can.onimport.exts(can, "inner/search.js", function(sub) { can.ui.search = sub, sub.select()
can.onmotion.delay(can, function() { can.onappend._output(sub, msg, sub.Conf(ctx.DISPLAY)) }) can.onmotion.delay(can, function() { can.onappend._output(sub, msg, sub.Conf(ctx.DISPLAY)) })

View File

@ -335,23 +335,34 @@ Volcanos(chat.ONIMPORT, {
msg.Table(function(value) { value._goback = function(event) { goback(event, true) }, can.onimport.myStory(can, value) }) msg.Table(function(value) { value._goback = function(event) { goback(event, true) }, can.onimport.myStory(can, value) })
} }
can.onimport.myField(can, sub) can.onimport.myField(can, sub)
var margin = 100; can.page.style(can, sub._target, html.LEFT, margin)
can.core.Timer({interval: 10, length: 50}, function(timer, interval, index, list) {
can.page.style(can, sub._target, html.LEFT, margin-(index+1)*(margin/list.length))
}, function() {})
sub.onexport.output = function(_sub, msg) { _sub._stacks_current = can._stacks_current, _sub._stacks_root = can._stacks_root sub.onexport.output = function(_sub, msg) { _sub._stacks_current = can._stacks_current, _sub._stacks_root = can._stacks_root
sub._select(), msg.Option(ice.MSG_ACTION) && can.onappend._action(sub, msg.Option(ice.MSG_ACTION), _action, null, true) sub._select(), msg.Option(ice.MSG_ACTION) && can.onappend._action(sub, msg.Option(ice.MSG_ACTION), _action, null, true)
sub.sub.onaction._goback = goback sub.sub.onaction._goback = goback
can.page.style(can, sub._output, "left", "0") }
}, can.page.style(can, sub._output, "left", "100") function goback(event, clear) {
function goback(event, clear) { if (value._goback) { return value._goback(event) } if (can._stacks_current.length == 1) { return }
if (value._goback) { return value._goback(event) }
sub.request(event, {_toast: can.user.trans(can, "reload", "刷新")}) sub.request(event, {_toast: can.user.trans(can, "reload", "刷新")})
if (clear) { if (sub.Option(UID)) { sub.Option(UID, "") } } if (clear) { if (sub.Option(UID)) { sub.Option(UID, "") } }
if (sub.Option(UID)) { return sub.Option(UID, ""), sub.Update(event) } if (sub.Option(UID)) { return sub.Option(UID, ""), sub.Update(event) }
var last = can._stacks_current.pop(); can.page.Remove(can, last._target) var _last = can._stacks_current.pop()
var last = can._stacks_current[can._stacks_current.length-1]; if (last._select) { can.core.Timer({interval: 10, length: 50}, function(timer, interval, index, list) {
if (last.ConfIndex().split(".").pop() == "message") { last.Update(event) } can.page.style(can, _last._target, html.LEFT, (index+1)*(margin/list.length))
can._stacks_current.length == 1 && last._output.innerHTML == "" && last.Update(event) }, function() { can.page.Remove(can, _last._target)
return last._select() var last = can._stacks_current[can._stacks_current.length-1]; if (last._select) {
} if (last.ConfIndex().split(".").pop() == "message") { last.Update(event) }
can._stacks_current.length == 1 && last._output.innerHTML == "" && last.Update(event)
return last._select()
}
})
}
function reload(event) {
sub.Update(sub.request(event, {_toast: can.user.trans(can, "reload", "刷新")}))
} }
function reload(event) { sub.Update(sub.request(event, {_toast: can.user.trans(can, "reload", "刷新")})) }
sub._select = function() { can.onimport.myOption(sub) sub._select = function() { can.onimport.myOption(sub)
can.page.SelectChild(can, _output, "*", function(target) { can.onmotion.toggle(can, target, target == sub._target) }) 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, "", "返回"), function(event) { goback(event) }), can.page.button(can, can.user.trans(can, "reload", "刷新"), function(event) { reload(event) })]
@ -392,7 +403,7 @@ Volcanos(chat.ONIMPORT, {
var style = can.Conf("_style."+target.name); style && can.page.ClassList.add(can, target, style) var style = can.Conf("_style."+target.name); style && can.page.ClassList.add(can, target, style)
}) })
}, },
itemcard: function(can, value, list, cb) { itemcard: function(can, value, list, cb) { if (!list) { return }
can.core.List(list, function(item) { if (!item || !item.list) { return } can.core.List(list, function(item) { if (!item || !item.list) { return }
for (var i = 0; i < item.list.length; i++) { if (item.list[i] && typeof item.list[i] == code.STRING) { item.list[i] = {text: item.list[i]} } } for (var i = 0; i < item.list.length; i++) { if (item.list[i] && typeof item.list[i] == code.STRING) { item.list[i] = {text: item.list[i]} } }
}) })
@ -470,6 +481,29 @@ Volcanos(chat.ONACTION, {
if (can.onkeymap.selectCtrlN(event, can, can.ui.tabs||can._action, html.DIV_TABS)) { return } if (can.onkeymap.selectCtrlN(event, can, can.ui.tabs||can._action, html.DIV_TABS)) { return }
can.onkeymap._parse(event, can) can.onkeymap._parse(event, can)
}, },
onslidemove: function(event, can, data, direction) {
// can.user.toast(can, [direction, data.spanX, data.spanY].join(","))
},
onslideright: function(event, can, data, direction) {
can.onaction._goback && can.onaction._goback(event)
},
onslideleft: function(event, can, data, direction) {
var button = can.base.Obj(can._msg.Option("_action"), [])[0]
button && can.run({}, [ctx.ACTION, button])
},
onslidedown: function(event, can, data, direction) {
var target = can.ui.list||can.ui.output||can._output
if (target.scrollTop == 0) {
can.Update(can.request(event, {_toast: "reload"}))
}
},
onslideup: function(event, can, data, direction) {
return
var target = can.ui.list||can._output
if (target.offsetHeight+target.scrollTop == target.scrollHeight) {
can.Update(can.request(event, {_toast: "reload"}))
}
},
}) })
Volcanos(chat.ONKEYMAP, { Volcanos(chat.ONKEYMAP, {
escape: function(event, can) {}, enter: function(event, can) {}, escape: function(event, can) {}, enter: function(event, can) {},