diff --git a/frame.js b/frame.js index 056fbeda..ce3885b2 100644 --- a/frame.js +++ b/frame.js @@ -1298,6 +1298,22 @@ Volcanos(chat.ONMOTION, { can.page.style(can, target, html.HEIGHT, begin += height/list.length) }, function() { can.page.style(can, target, html.HEIGHT, "") }) }, + slideIn: function(can) { var margin = 100 + var target = can._target + 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() {}) + }, + slideOut: function(can, cb) { var margin = 100 + var target = can._target + if (can._output.innerHTML == "") { return can.page.Remove(can, target), cb && cb() } + can.core.Timer({interval: 10, length: 30}, function(timer, interval, index, list) { + can.page.style(can, target, html.LEFT, (index+1)*(margin/list.length)) + }, function() { + can.page.Remove(can, target), cb && cb() + }) + }, slideAction: function(can, target) { var action = can.page.Select(can, target.parentNode, html.DIV_ACTION)[0] var beginY, beginX, beginLeft, max = can.base.Max(action.offsetWidth, 240, 60) @@ -1332,7 +1348,7 @@ Volcanos(chat.ONMOTION, { var beginY = 0, beginX = 0, spanY = 0, spanX = 0, data function direction() { if (Math.abs(spanX) > Math.abs(spanY)) { - if (Math.abs(spanX) < 50) { + if (Math.abs(spanX) < 100) { return "move" } else if (spanX > 0) { return "right" @@ -1340,7 +1356,7 @@ Volcanos(chat.ONMOTION, { return "left" } } else { - if (Math.abs(spanY) < 50) { + if (Math.abs(spanY) < 150) { return "move" } else if (spanY > 0) { return "down" @@ -1355,6 +1371,7 @@ Volcanos(chat.ONMOTION, { 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 + if (Math.abs(spanX) > Math.abs(spanY)) { can.onkeymap.prevent(event) } can.onaction.onslidemove(event, can, data = {beginX: beginX, beginY: beginY, spanX: spanX, spanY: spanY}, direction()) } target.ontouchend = function(event) { var msg = can.request(event) diff --git a/lib/base.js b/lib/base.js index dc464d47..b0654400 100644 --- a/lib/base.js +++ b/lib/base.js @@ -90,6 +90,7 @@ Volcanos("base", { if (item == arg[i]) { return true } } }, TimeTrim: function(value) { var prefix = "" + if (!value) { return } var now = new Date(), year = now.getFullYear()+"-", pre = this.Time(now, "%y-%m-%d ") if (value.indexOf(pre) == -1) { var list = ["昨天", "前天", "", "", "", "", ""] for (var i = 0; i < list.length; i++) { diff --git a/plugin/table.js b/plugin/table.js index a5c4edb3..dfe70772 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -272,8 +272,7 @@ Volcanos(chat.ONIMPORT, { can.user.isMobile? can.user.jumps(can.misc.MergePodCmd(can, {cmd: index+"/"+args.join("/")})): can.onappend._float(can, index, args) }, - myOption: function(can) { var sub = can.sub; if (!sub) { return } var plugin = sub._stacks_current[0] - current = plugin.current||{} + myOption: function(can) { var sub = can.sub; if (!sub) { return } var plugin = sub._stacks_current[0]; current = plugin.current||{} if (plugin == sub._stacks_root) { var PLACE_UID = can.core.Item(can.Option())[0] if (sub._stacks_current.length == 1) { plugin.sub.onexport.hash(plugin.sub, can.Option(PLACE_UID)) @@ -311,13 +310,12 @@ Volcanos(chat.ONIMPORT, { sub._select = function() { can.onimport.myPluginSelect(can, sub, _output) }, sub._select(), cb && cb(sub) }, _output) }, - myStory: function(can, value) { + myStory: function(can, value) { var ACTION_HEIGHT = 48 if (!can._stacks_current) { var sup = can.sup; can._stacks_root = sup, sup._stacks = {} var key = [can.ConfSpace(), can.ConfIndex()].concat(can.base.trim(can.core.Item(can.Option(), function(key, value) { return value }))).join(",") can._stacks_current = sup._stacks[key] = [can.sup] sup._select = function() { can.onimport.myPluginSelect(can, sup, sup._target.parentNode) } } var plugin = can._stacks_current[0], _action = plugin._action, _output = plugin._output; current = plugin.current||{} - var ACTION_HEIGHT = 48 value.type = html.STORY, value.style = html.OUTPUT, value.height = (can.user.isMobile? window.innerHeight: can.ConfHeight())-ACTION_HEIGHT can.onappend.plugin(can, value, function(sub) { can._stacks_current.push(sub) can.core.List(["_trans", "_style", "_icons", "_trans.input", "_trans.value"], function(key) { @@ -325,43 +323,46 @@ Volcanos(chat.ONIMPORT, { }) var STREET_NAME = plugin.sub.Conf("_street_name"), PLACE_NAME = plugin.sub.Conf("_place_name") var run = sub.run; sub.run = function(event, cmds, cb) { - run(can.request(event, { + run(sub.request(event, { city_name: current[CITY_NAME], street_name: current[STREET_NAME], place_name: current[PLACE_NAME], dashboard_uid: current["dashboard_uid"], storage_uid: current["storage_uid"], command_uid: sub.Conf("command_uid"), portal_name: can.ConfHelp(), }, can.base.Obj(sub.Conf("field.option"))), cmds, cb) } - sub.onimport._field = function(sub, msg, cb) { - 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() {}) + can.onimport.myField(can, sub), can.onmotion.slideIn(sub) 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 } - 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) } + sub.onimport._field = function(msg) { can.onmotion.clear(can, sub._output) + var sup = sub + msg.Table(function(value) { + can.onappend.plugin(can, value, function(sub) { + var run = sub.run; sub.run = function(event, cmds, cb) { + run(sub.request(event, { + city_name: current[CITY_NAME], street_name: current[STREET_NAME], place_name: current[PLACE_NAME], + dashboard_uid: current["dashboard_uid"], storage_uid: current["storage_uid"], + command_uid: sub.Conf("command_uid"), portal_name: can.ConfHelp(), + }, can.base.Obj(sub.Conf("field.option")), sup.Option()), cmds, cb) + } + }, sub._output) + }) + } + function goback(event) { if (can._stacks_current.length == 1) { return } + if (sub._history.length > 1) { + sub.request(event, {_toast: "reload"}) + return sub.onimport.back(event, sub) + } 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() - } + can.onmotion.slideOut(_last, function() { + var last = can._stacks_current[can._stacks_current.length-1]; last._select() + 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) }) } function reload(event) { - sub.Update(sub.request(event, {_toast: can.user.trans(can, "reload", "刷新")})) + sub.Update(sub.request(event, {_toast: "reload"})) } sub._select = function() { can.onimport.myOption(sub) can.page.SelectChild(can, _output, "*", function(target) { can.onmotion.toggle(can, target, target == sub._target) }) @@ -489,7 +490,7 @@ Volcanos(chat.ONACTION, { }, onslideleft: function(event, can, data, direction) { var button = can.base.Obj(can._msg.Option("_action"), [])[0] - button && can.run({}, [ctx.ACTION, button]) + button && can.run({}, [ctx.ACTION, button].concat(can.base.trim(can.core.Item(can.Option(), function(key, value) { return value })))) }, onslidedown: function(event, can, data, direction) { var target = can.ui.list||can.ui.output||can._output