From 5f3ccc5c65c8e286e6a5632a40ba732300fc3e51 Mon Sep 17 00:00:00 2001 From: shy Date: Wed, 18 Sep 2024 20:40:50 +0800 Subject: [PATCH] add some --- frame.js | 59 +++++++++++++++++++++++++++++++------- plugin/local/code/vimer.js | 8 +++--- plugin/table.js | 56 +++++++++++++++++++++++++++++------- 3 files changed, 97 insertions(+), 26 deletions(-) diff --git a/frame.js b/frame.js index 85d71284..056fbeda 100644 --- a/frame.js +++ b/frame.js @@ -1,7 +1,7 @@ Volcanos(chat.ONENGINE, { _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.Inputs = can.page.Append(can, document.body, ["inputs"])._target 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() 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._engine(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() { - if (sub.__toast || sub._toast) { return } toast = toast||can.user.toastProcess(sub, _toast) - }, 30) } - + if (sub.__toast || sub._toast) { return } toast = toast||can.user.toastProcess(sub, can.user.trans(sub, _toast)) + }, 0) } 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) 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) 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.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 }) }, @@ -376,12 +369,16 @@ Volcanos(chat.ONAPPEND, { } msg.Defer(), can.base.isFunc(cb) && cb(msg) can._output.scrollTop = output_old.scrollTop, can._output.scrollLeft = output_old.scrollLeft 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", "") 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.Remove(can, output_old) 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") can.core.Timer({length: (width-begin)/10, interval: 10}, function(timer, interval, index, list) { if (can.page.ClassList.has(can, can._target, "_back")) { @@ -1310,11 +1307,17 @@ Volcanos(chat.ONMOTION, { target.addEventListener("touchmove", function(event) { 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 + if (beginLeft == 0 && left > 0) { return } 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.onkeymap.prevent(event) }) 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) { can.page.style(can, event.currentTarget, {left: -max}) } 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, { _init: function(can, target) { target = target||document.body, can.onkeymap._build(can) diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 98302241..c3ff4b7f 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -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) 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) - can.request(event, {file: can.Option(nfs.FILE), content: can.onexport.content(can)}) + save: function(event, can, button) { + 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.reload(can, msg), can.user.toastSuccess(can, p, button) + can.onaction.reload(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) }, 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) }, - 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() 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)) }) diff --git a/plugin/table.js b/plugin/table.js index 6ec99135..a5c4edb3 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -335,23 +335,34 @@ Volcanos(chat.ONIMPORT, { msg.Table(function(value) { value._goback = function(event) { goback(event, true) }, can.onimport.myStory(can, value) }) } 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._select(), msg.Option(ice.MSG_ACTION) && can.onappend._action(sub, msg.Option(ice.MSG_ACTION), _action, null, true) 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) { if (value._goback) { return value._goback(event) } + } + function goback(event, clear) { + if (can._stacks_current.length == 1) { return } + if (value._goback) { return value._goback(event) } sub.request(event, {_toast: can.user.trans(can, "reload", "刷新")}) if (clear) { if (sub.Option(UID)) { sub.Option(UID, "") } } 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[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() - } + var _last = can._stacks_current.pop() + can.core.Timer({interval: 10, length: 50}, function(timer, interval, index, list) { + can.page.style(can, _last._target, html.LEFT, (index+1)*(margin/list.length)) + }, function() { can.page.Remove(can, _last._target) + 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) 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) })] @@ -392,7 +403,7 @@ Volcanos(chat.ONIMPORT, { 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 } 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 } 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, { escape: function(event, can) {}, enter: function(event, can) {},