diff --git a/frame.js b/frame.js index 1a7e0b3d..1685ec71 100644 --- a/frame.js +++ b/frame.js @@ -117,7 +117,7 @@ Volcanos("ondaemon", {help: "推荐引擎", list: [], _init: function(can, name) exit: function(can, msg, sub) { can.user.close() }, refresh: function(can, msg, sub) { sub.Update() }, pwd: function(can, msg, arg) { can.ondaemon._list[0] = arg[0] }, - grow: function(can, msg, sub, arg) { sub.onimport._grow(sub, can.page.Color(arg.join(""))) }, + grow: function(can, msg, sub, arg) { sub.onimport._grow(sub, msg, can.page.Color(arg.join(""))) }, toast: function(can, msg, arg) { can.core.CallFunc(can.user.toast, {can: can, msg: msg, cmds: arg}) }, }) Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, list, cb, target, field) { @@ -964,10 +964,14 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe }}]) }, toimage: function(event, can, name, target) { - can.user.input(event, can, [{name: "name", value: name}], function(ev, button, data) { - 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) { - can.page.Create(can, html.A, {href: canvas.toDataURL("image/png"), download: data.name}).click() + 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") + var toast = can.user.toast(can, {content: {img: url, style: {"max-height": 240, display: "block"}}, duration: -1, + action: shy({}, [cli.CLOSE, "download"], function(event, button) { + can.user.input(event, can, [{name: "name", value: name}], function(ev, button, data) { toast.close() + can.page.Create(can, html.A, {href: url, download: data.name}).click() + }) + }), }) }) }) @@ -1175,4 +1179,4 @@ Volcanos("onkeymap", {help: "键盘交互", list: [], _focus: [], _init: functio cursorMove: function(can, target, count, begin) { begin != undefined && target.setSelectionRange(begin, begin) target.setSelectionRange(target.selectionStart+count, target.selectionStart+count) }, -}); _can_name = "" +}) diff --git a/lib/base.js b/lib/base.js index ce56be9c..b95a4a3e 100644 --- a/lib/base.js +++ b/lib/base.js @@ -238,4 +238,3 @@ Volcanos("base", {help: "数据类型", Int: function(val, def) { return parseIn return list.join(outer||ice.SP) }, }) - diff --git a/lib/core.js b/lib/core.js index 11561b83..2e734c45 100644 --- a/lib/core.js +++ b/lib/core.js @@ -229,4 +229,3 @@ Volcanos("core", {help: "数据结构", return timer }), }) - diff --git a/lib/misc.js b/lib/misc.js index df15fd52..1e826da4 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -207,6 +207,7 @@ Volcanos("misc", {help: "通信协议", Message: function(event, can) { var msg MergeURL: shy("地址链接", function(can, objs, clear) { var path = location.pathname; objs._path && (path = objs._path, delete(objs._path)) objs && objs.pod && (path = "/chat/pod/"+objs.pod, delete(objs.pod)) + objs && objs.cmd && (path = (path.indexOf("/chat/pod/") == 0)? path+"/cmd/"+objs.cmd: "/chat/cmd/"+objs.cmd, delete(objs.cmd)) return can.base.MergeURL(location.origin+path+(clear?"":location.search), objs) }), @@ -265,4 +266,3 @@ Volcanos("misc", {help: "通信协议", Message: function(event, can) { var msg return hour+":"+minute+":"+second }, }) - diff --git a/lib/page.js b/lib/page.js index c9195b93..696bef99 100644 --- a/lib/page.js +++ b/lib/page.js @@ -433,4 +433,3 @@ Volcanos("page", {help: "用户界面", ClassList: { return item }, }) - diff --git a/lib/user.js b/lib/user.js index 062ac603..0e6d5b29 100644 --- a/lib/user.js +++ b/lib/user.js @@ -74,6 +74,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: { "list": "查看", "back": "返回", "run": "执行", "done": "完成", "share": "共享", "edit": "编辑", "save": "保存", "copy": "复制", "show": "显示", "hide": "隐藏", "project": "项目", "profile": "详情", "actions": "参数", + "download": "下载", "plugin": "插件", "prev": "上一页", "next": "下一页", @@ -85,11 +86,15 @@ Volcanos("user", {help: "用户操作", info: {}, agent: { "label": "标签", "exec": "执行", }[text]||text }, - toastConfirm: function(can, title, content, action) { + toastScript: function(can, content, title) { + var ui = can.user.toast(can, {title: title, duration: -1, width: -300, content: content, action: [cli.CLOSE]}) + can.onmotion.story.auto(can, ui._target) + }, + toastConfirm: function(can, content, title, action) { return can.user.toast(can, {title: title, content: content, action: action||[cli.CLOSE], duration: -1, width: -300}) }, - toastProcess: function(can, title) { return can.user.toast(can, ice.PROCESS, title, -1) }, - toastSuccess: function(can, title) { return can.user.toast(can, ice.SUCCESS, title) }, + toastProcess: function(can, content, title) { return can.user.toast(can, content, title||ice.PROCESS, -1) }, + toastSuccess: function(can, content, title) { return can.user.toast(can, content, title||ice.SUCCESS) }, toast: function(can, content, title, duration, progress) { var meta = can.base.isObject(content)? content: {content: content, title: title||can._help, duration: duration, progress: progress} var width = meta.width||400, height = meta.height||100; if (width < 0) { width = window.innerWidth + width } @@ -108,7 +113,14 @@ Volcanos("user", {help: "用户操作", info: {}, agent: { ]}, ] }]) - var action = can.onappend._action(can, meta.action||[""], ui.action, { + var action = can.onappend._action(can, meta.action && meta.action.list? meta.action.list: meta.action||[""], ui.action, { + _engine: function(event, button) { + var cb = meta.action[button]||meta.action; can.base.isFunc(cb) && cb(event, button) + }, + open: function(event) { + if (meta.content.indexOf("http") == 0) { can.user.open(meta.content) } + if (meta.title.indexOf("http") == 0) { can.user.open(meta.title) } + }, close: function(event) { can.page.Remove(can, action._target), action.timer.stop = true }, timer: can.core.Timer({interval: 100, length: (parseInt(meta.duration||1000))/100}, function(event, interval, index) { if (index > 30) { ui.duration.innerHTML = parseInt(index/10)+ice.PT+(index%10)+"s..." } @@ -122,7 +134,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: { can.run(msg._event, cmd||[ctx.ACTION, chat.SHARE], function(msg) { can.user.toast(can, {height: 300, width: 500, title: msg.Append(mdb.NAME), duration: -1, - content: msg.Append(mdb.TEXT), action: [cli.CLOSE], + content: msg.Append(mdb.TEXT), action: [cli.CLOSE, cli.OPEN], }), can.user.copy(msg._event, can, msg.Append(mdb.NAME)) }) }, @@ -187,17 +199,17 @@ Volcanos("user", {help: "用户操作", info: {}, agent: { a.download = name, a.click() }, img.src = "data:image/svg+xml,"+encodeURIComponent(text) }, - copy: function(event, can, text) { + copy: function(event, can, text) { if (!text) { return } if (navigator.clipboard) { var ok = false - navigator.clipboard.writeText(text).then(function() { ok = true }) - if (ok) { return can.user.toastSuccess(can) } + navigator.clipboard.writeText(text).then(function() { ok = true }); if (ok) { + can.user.toastSuccess(can, text, "copy success"), can.misc.Log("copy", text) + return text + } } var input = can.page.Append(can, event.target.parentNode, [{type: html.TEXTAREA, value: text}]).first - can.onmotion.focus(can, input), document.execCommand("Copy") - can.page.Remove(can, input), can.user.toastSuccess(can) - can.onkeymap.prevent(event) - can.misc.Log("copy", text) + can.onmotion.focus(can, input), document.execCommand("Copy"), can.page.Remove(can, input) + can.user.toastSuccess(can, text, "copy success"), can.misc.Log("copy", text) return text }, carte: function(event, can, meta, list, cb, parent) { // event item meta @@ -345,12 +357,14 @@ Volcanos("user", {help: "用户操作", info: {}, agent: { download: function(can, path, name) { var a = can.page.Append(can, document.body, [{type: html.A, href: path, download: name||path.split(ice.PS).pop()}]).first a.click(), can.page.Remove(can, a) + return path + }, + downloads: function(can, text, name) { if (!text) { return } + return can.user.download(can, URL.createObjectURL(new Blob([text])), name) }, - downloads: function(can, text, name) { can.user.download(can, URL.createObjectURL(new Blob([text])), name) }, camera: function(can, msg, cb) { navigator.getUserMedia({video: true}, cb, function(error) { can.misc.Log(error) }) }, }) - diff --git a/page/index.css b/page/index.css index 23d40141..b0178ed4 100644 --- a/page/index.css +++ b/page/index.css @@ -102,6 +102,7 @@ body>div.toast div.duration { color:gray; float:right; } body>div.toast div.content { text-align:center; } body>div.toast div.progress { border:solid 2px green; margin-left:-2px; height:10px; clear:both; } body>div.toast div.progress div.current { background-color:red; height:10px; } +body>div.toast div.action { display:block; } body>div.carte { background-color:#295b61; color:white; padding:4px; min-width:80px; } body>div.carte div.item { padding:3px 12px; } diff --git a/panel/action.js b/panel/action.js index 8c140456..50027bc7 100644 --- a/panel/action.js +++ b/panel/action.js @@ -214,7 +214,7 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, cb, t help: function(can, button) { can.user.open("/help/"+button+".shy") }, layout: function(can, button, silent) { if (button == "toimage") { - can.onmotion.toimage(event, can, document.title, can._output) + can.onmotion.toimage(event, can, can.Conf(chat.STORM), can._output) return } can.page.ClassList.del(can, can._target, can.Conf(chat.LAYOUT)) @@ -321,4 +321,3 @@ Volcanos("onexport", {help: "导出数据", list: [], }) }, }) - diff --git a/panel/footer.js b/panel/footer.js index 514d381b..9d0dadf1 100644 --- a/panel/footer.js +++ b/panel/footer.js @@ -110,4 +110,3 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, cb, t Volcanos("onexport", {help: "导出数据", list: [], height: function(can) { return can._target.offsetHeight }, }) - diff --git a/panel/header.js b/panel/header.js index 9e7f07e2..86b74aee 100644 --- a/panel/header.js +++ b/panel/header.js @@ -265,4 +265,3 @@ Volcanos("onexport", {help: "导出数据", list: [], height: function(can) { return can._target.offsetHeight }, topic: function(can) { return can._topic }, }) - diff --git a/panel/river.js b/panel/river.js index c358e750..f6681511 100644 --- a/panel/river.js +++ b/panel/river.js @@ -284,4 +284,3 @@ Volcanos("onexport", {help: "导出数据", list: [], }) }, }) - diff --git a/panel/search.js b/panel/search.js index 3103826d..8bfef3ee 100644 --- a/panel/search.js +++ b/panel/search.js @@ -124,4 +124,3 @@ Volcanos("onexport", {help: "导出数据", list: [], }).slice(1) }, }) - diff --git a/plugin/input.js b/plugin/input.js index 64bb2b8a..a6adc948 100644 --- a/plugin/input.js +++ b/plugin/input.js @@ -29,4 +29,3 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta, } can.onkeymap.prevent(event) }, }) - diff --git a/plugin/input/date.js b/plugin/input/date.js index 5ebbc02f..d85e54c3 100644 --- a/plugin/input/date.js +++ b/plugin/input/date.js @@ -58,4 +58,3 @@ Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(e return now } show(now), can.onlayout.figure(event, can), can.base.isFunc(cbs) && cbs(can) })}} }, [""]) - diff --git a/plugin/input/key.js b/plugin/input/key.js index 13f152b1..0a1e6d5f 100644 --- a/plugin/input/key.js +++ b/plugin/input/key.js @@ -48,4 +48,3 @@ Volcanos("onfigure", {help: "控件详情", list: [], key: { } }, }}) - diff --git a/plugin/input/province.js b/plugin/input/province.js index 02495975..3cfcfb30 100644 --- a/plugin/input/province.js +++ b/plugin/input/province.js @@ -6,4 +6,3 @@ Volcanos("onfigure", {help: "控件详情", list: [], province: {onclick: functi }), can.Status(mdb.TOTAL, 34), can.onlayout.figure(event, can), can.base.isFunc(cbs) && cbs(can) }) }) }}, }) - diff --git a/plugin/local/chat/div.js b/plugin/local/chat/div.js index d2400e01..96f8e506 100644 --- a/plugin/local/chat/div.js +++ b/plugin/local/chat/div.js @@ -92,4 +92,3 @@ Volcanos("onaction", {help: "操作数据", list: [], }, }) Volcanos("onexport", {help: "导出数据", list: []}) - diff --git a/plugin/local/chat/media.js b/plugin/local/chat/media.js index ffabc7ed..61b8292f 100644 --- a/plugin/local/chat/media.js +++ b/plugin/local/chat/media.js @@ -33,4 +33,3 @@ Volcanos("onaction", {help: "操作数据", list: [], _init: function(can, msg, }) Volcanos("onexport", {help: "导出数据", list: [], }) - diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index a1cf4540..b10f63e3 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -635,4 +635,3 @@ Volcanos("onexport", {help: "导出数据", list: ["文件数", "解析器", " return can.page.Select(can, can.ui.content, "td.text", function(item) { return item.innerText }).join(ice.NL) }, }) - diff --git a/plugin/local/code/inner/favor.js b/plugin/local/code/inner/favor.js index 7fd82e34..8c333418 100644 --- a/plugin/local/code/inner/favor.js +++ b/plugin/local/code/inner/favor.js @@ -28,4 +28,3 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, args, cb) { }, can.base.isFunc(cb) && cb(sub) }) }}) - diff --git a/plugin/local/code/inner/search.js b/plugin/local/code/inner/search.js index f8665b19..da5bc01a 100644 --- a/plugin/local/code/inner/search.js +++ b/plugin/local/code/inner/search.js @@ -56,4 +56,3 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, args, cb) { var can.ui.search._show = show }) }}) - diff --git a/plugin/local/code/inner/sess.js b/plugin/local/code/inner/sess.js index 76aed025..d90d64a1 100644 --- a/plugin/local/code/inner/sess.js +++ b/plugin/local/code/inner/sess.js @@ -19,4 +19,3 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, args, cb) { var }, can.base.isFunc(cb) && cb(sub) }) }}) - diff --git a/plugin/local/code/inner/template.js b/plugin/local/code/inner/template.js index 9debc38b..44abf545 100644 --- a/plugin/local/code/inner/template.js +++ b/plugin/local/code/inner/template.js @@ -21,5 +21,3 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, args, cb) { }, can.base.isFunc(cb) && cb(sub) }) }}) - - diff --git a/plugin/local/code/snippet.js b/plugin/local/code/snippet.js index 90bd4141..6cbf9d38 100644 --- a/plugin/local/code/snippet.js +++ b/plugin/local/code/snippet.js @@ -29,4 +29,3 @@ Volcanos("onaction", {help: "操作数据", list: [], _init: function(can, msg, }) Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg, list, cb, target) { }}) - diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 6e0d0376..8abac5a7 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -205,7 +205,7 @@ Volcanos("onaction", {help: "控件交互", list: [nfs.SAVE, code.AUTOGEN, code. can.onaction._runs(event, can, button) }, publish: function(event, can, button) { - can.runAction(event, button, [], function(msg) { can.user.toastConfirm(can, button, msg.Result()) }) + can.runAction(event, button, [], function(msg) { can.user.toastConfirm(can, msg.Result(), button) }) }, listTags: function(event, can, button) { var list = [] @@ -336,4 +336,3 @@ Volcanos("onaction", {help: "控件交互", list: [nfs.SAVE, code.AUTOGEN, code. }, }) Volcanos("onexport", {help: "导出数据", list: ["文件数", "模式", "按键", "解析器", "文件名", "当前行", "跳转数"]}) - diff --git a/plugin/local/team/plan.js b/plugin/local/team/plan.js index b26c9a8b..3e933661 100644 --- a/plugin/local/team/plan.js +++ b/plugin/local/team/plan.js @@ -196,4 +196,3 @@ Volcanos("onexport", {help: "导出数据", list: ["count", "begin_time", "zone" title: function(can, task) { return task.zone+": "+(task.type||"") }, style: function(can, task) { return ["item", task.status, "id"+task.id, "l"+(task.level||""), "s"+(task.score||"")].join(" ") }, }) - diff --git a/plugin/local/wiki/data.js b/plugin/local/wiki/data.js index 24692757..a0b996e8 100644 --- a/plugin/local/wiki/data.js +++ b/plugin/local/wiki/data.js @@ -140,4 +140,3 @@ Volcanos("onexport", {help: "导出数据", list: [], }).join("\n") }, }) - diff --git a/plugin/local/wiki/draw.js b/plugin/local/wiki/draw.js index 1705df6a..2973edb4 100644 --- a/plugin/local/wiki/draw.js +++ b/plugin/local/wiki/draw.js @@ -587,4 +587,3 @@ Volcanos("onexport", {help: "导出数据", list: ["group", "figure", "index", " } }, }) - diff --git a/plugin/local/wiki/draw/heart.js b/plugin/local/wiki/draw/heart.js index 792f65a2..a2ddaee5 100644 --- a/plugin/local/wiki/draw/heart.js +++ b/plugin/local/wiki/draw/heart.js @@ -57,4 +57,3 @@ Volcanos("heart", {help: "心形", list: [], return "heart " + target.Value("tt") }, }) - diff --git a/plugin/local/wiki/draw/path.js b/plugin/local/wiki/draw/path.js index eda19c1f..e04eb1f1 100644 --- a/plugin/local/wiki/draw/path.js +++ b/plugin/local/wiki/draw/path.js @@ -149,4 +149,3 @@ Volcanos("onfigure", {help: "图形绘制", list: [], show: function(can, target) { return target.tagName + " " + target.Value("d") }, }, }) - diff --git a/plugin/local/wiki/draw/walk_trash.js b/plugin/local/wiki/draw/walk_trash.js index 18b21c1c..0e7ca90e 100644 --- a/plugin/local/wiki/draw/walk_trash.js +++ b/plugin/local/wiki/draw/walk_trash.js @@ -147,4 +147,3 @@ Volcanos("onimport", {help: "导入数据", list: [], }) }, }) - diff --git a/plugin/local/wiki/feel.js b/plugin/local/wiki/feel.js index 02148ff7..7218bda5 100644 --- a/plugin/local/wiki/feel.js +++ b/plugin/local/wiki/feel.js @@ -122,4 +122,3 @@ Volcanos("onexport", {help: "导出数据", list: ["begin", "limit", "total", "p return parseInt((index+1)*100/total)+"%"+" = "+(parseInt(index)+1)+ice.PS+parseInt(total) }, }) - diff --git a/plugin/local/wiki/word.js b/plugin/local/wiki/word.js index 454b92a2..76e5971e 100644 --- a/plugin/local/wiki/word.js +++ b/plugin/local/wiki/word.js @@ -260,4 +260,3 @@ Volcanos("ondetail", {help: "交互操作", list: ["删除"], _init: function(ca "结束": function(event, can) { can.page.Remove(can, can._target) }, "删除": function(event, sub) { sub.page.Remove(sub, sub._target) }, }) - diff --git a/plugin/state.js b/plugin/state.js index 01ff7afc..005b2ed1 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -1,36 +1,28 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, list, cb, target) {}, _process: function(can, msg) { msg.OptionStatus() && can.onmotion.clear(can, can._status) && can.onappend._status(can, can.base.Obj(msg.OptionStatus())) - return can.core.CallFunc([can.onimport, msg.OptionProcess()], [can, msg]) + return can.core.CallFunc([can.onimport, msg.OptionProcess()], {can: can, msg: msg}) }, - _confirm: function(can, msg, _arg) { var sub = can.request({}, can.Option()) - if (can.user.confirm(_arg)) { can.run(sub._event, [ctx.ACTION, "confirm"], function() {}, true) } + _location: function(can, msg, _arg) { location.href = _arg; return true }, + _replace: function(can, msg, _arg) { location.replace(_arg); return true }, + _history: function(can, msg) { history.back(); return true }, + _confirm: function(can, msg, _arg) { can.user.confirm(_arg) && can.runAction(can.request({}, msg)._event, "confirm"); return true }, + _refresh: function(can, msg) { + can.core.Timer(parseInt(msg.Option("_delay")||"500"), function() { + can.Update(can.request({}, {_count: parseInt(msg.Option("_count"))-1})._event) + }) + return true }, - _location: function(can, msg) { location.href = msg._arg[0] }, - _replace: function(can, msg) { location.replace(msg._arg[0]) }, - _history: function(can, msg) { history.back() }, _rewrite: function(can, msg) { for (var i = 0; i < msg._arg.length; i += 2) { can.Option(msg._arg[i], msg._arg[i+1]) can.Action(msg._arg[i], msg._arg[i+1]) } - can.Update() - return true - }, - _refresh: function(can, msg) { - can.core.Timer(parseInt(msg.Option("_delay")||"500"), function() { - var sub = can.request({}, {_count: parseInt(msg.Option("_count"))-1}) - can.Update() - }) - return true + return can.Update() }, _display: function(can, msg) { - Volcanos("some", {}, [msg.Option(ice.MSG_DISPLAY)].concat(Volcanos.meta.libs, Volcanos.meta.volcano), function(sub) { - sub.Conf(can.Conf()), sub.run = can.run - sub._option = can._option, sub._action = can._action - sub.onimport._init(sub, msg, [], function() {}, can._output) - }) + can.onappend._output(can, msg, msg.Option(ice.MSG_DISPLAY)) return true }, _field: function(can, msg) { @@ -58,129 +50,107 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, can.onappend.table(can, msg) can.onappend.board(can, msg) can.onmotion.story.auto(can) - can.page.Modify(can, can._output, {style: {display: html.BLOCK}}) + can.page.style(can, can._output, "display", html.BLOCK) return true }, - _open: function(can, msg) { - can.user.open(msg.Option("_arg")), can.Update() - return true - }, _hold: function(can, msg) { return true }, - _back: function(can) { - can._history.pop(); for (var his = can._history.pop(); his; his = can._history.pop()) { if (his[0] == ctx.ACTION) { continue } + _back: function(can) { can._history.pop() + for (var his = can._history.pop(); his; his = can._history.pop()) { if (his[0] == ctx.ACTION) { continue } var index = 0 can.page.SelectArgs(can, can._option, "", function(item) { item.value = his[index++]||"" }) can.page.SelectArgs(can, can._action, "", function(item) { item.value = his[index++]||"" }) - can.Update() - break + can.Update(); break } !his && can.Update() return true }, - - _grow: function(can, str) { - if (can.page.Select(can, can._output, "div.code", function(div) { - can.page.Modify(can, div, {style: {"max-height": 400}}) - can.page.Append(can, div, [{text: [str]}]) + _rich: function(can, msg, _arg) { + if (can.page.Select(can, can._output, [html.TABLE_CONTENT, "tbody"], function(table) { + var head = can.page.Select(can, can._output, [html.TABLE_CONTENT, "th"], function(th) { return th.innerText }) + can.page.Append(can, table, msg.Table(function(value) { + return {row: can.core.List(head, function(key) { return value[key] })} + })) + return true + }).length == 0) { can.onappend.table(can, msg) } + return true + }, + _grow: function(can, msg, _arg) { + if (can.page.Select(can, can._output, html.DIV_CODE, function(div) { + can.page.style(can, div, html.MAX_HEIGHT, 400) + can.page.Append(can, div, [{text: _arg}]) div.scrollBy(0, 10000) return true - }).length == 0) { - can.onappend.board(can, str) - } + }).length == 0) { can.onappend.board(can, _arg) } + return true + }, + _open: function(can, msg, _arg) { + return can.user.open(_arg), can.Update() }, }) Volcanos("onaction", {help: "交互操作", list: [ - "共享工具", "刷新数据", "切换全屏", "打开链接", "生成链接", "生成图片", "生成脚本", [ - "其它", "扩展参数", "清空参数", "复制数据", "下载数据", "清空数据", "删除工具", + "刷新数据", "切换全屏", "共享工具", "打开链接", "生成链接", "生成脚本", "生成图片", [ + "其它", "清空参数", "扩展参数", "复制数据", "下载数据", "清空数据", "删除工具", ], ], _init: function(can, msg, list, cb, target) {}, _engine: function(event, can, button) { can.Update(event, [ctx.ACTION, button].concat(can.Input([], true))) }, - "扩展参数": function(event, can) { - can.onmotion.toggle(can, can._action) + "刷新数据": function(event, can) { can.Update({}, can.Input([], true)) }, + "切换全屏": function(event, can) { var sub = can._outputs[can._outputs.length-1] + if (can.page.ClassList.neg(can, can._target, "Full")) { + sub._height_bak = sub.ConfHeight(), sub._width_bak = sub.ConfWidth() + var height = window.innerHeight-(can._status.innerText? 2: 1)*html.ACTION_HEIGHT + can.user.isMobile && (height -= 2*html.ACTION_HEIGHT) + can.page.style(can, can._output, html.HEIGHT, sub.ConfHeight(height), html.MIN_WIDTH, sub.ConfWidth(window.innerWidth)) + can.core.CallFunc([sub, "onimport.layout"], {can: sub}) + } else { + sub.ConfHeight(sub._height_bak), sub.ConfWidth(sub._width_bak) + can.core.CallFunc([sub, "onimport.layout"], {can: sub}) + can.page.style(can, can._output, html.HEIGHT, "", html.MIN_WIDTH, "") + } }, "共享工具": function(event, can) { var meta = can.Conf() can.onmotion.share(event, can, [{name: chat.TITLE, value: meta.name}, {name: chat.TOPIC, values: [cli.WHITE, cli.BLACK]}], [ mdb.NAME, meta.index, mdb.TEXT, JSON.stringify(can.Input([], true)), ]) }, - "切换全屏": function(event, can) { var sub = can._outputs[can._outputs.length-1] - if (can.page.ClassList.neg(can, can._target, "Full")) { - sub._height_bak = sub.ConfHeight(), sub._width_bak = sub.ConfWidth() - var height = window.innerHeight-(can._status.innerText? 2: 1)*html.ACTION_HEIGHT - can.user.isMobile && (height -= 2*html.ACTION_HEIGHT) - can.page.style(can, can._output, "height", sub.ConfHeight(height), "min-width", sub.ConfWidth(window.innerWidth)) - can.core.CallFunc([sub, "onimport.layout"], {can: sub}) - } else { - sub.ConfHeight(sub._height_bak), sub.ConfWidth(sub._width_bak) - can.core.CallFunc([sub, "onimport.layout"], {can: sub}) - can.page.style(can, can._output, "height", "", "min-width", "") - } - }, - "打开链接": function(event, can) { var meta = can.Conf() - var pre = "/chat/cmd/"; if (can.user.mod.isPod) { pre = "/chat/pod/"+can.misc.Search(can, ice.POD)+"/cmd/" } - var args = can.Option(); args._path = pre+(meta.index||can.core.Keys(meta.ctx, meta.cmd)) - args._path.indexOf("/cmd/web.wiki.word") > -1 && (args = {_path: pre+args.path}) - + "打开链接": function(event, can) { var meta = can.Conf(), args = can.Option() + args.cmd = meta.index||can.core.Keys(meta.ctx, meta.cmd), args.cmd == "web.wiki.word" && (args.cmd = args.path) can.user.isWeiXin? can.user.jumps(can.misc.MergeURL(can, args)): can.user.open(can.misc.MergeURL(can, args)) }, - "生成链接": function(event, can) { var meta = can.Conf() - var pre = "/chat/cmd/"; if (can.user.mod.isPod) { pre = "/chat/pod/"+can.misc.Search(can, ice.POD)+"/cmd/" } - var args = can.Option(); args._path = pre+(meta.index||can.core.Keys(meta.ctx, meta.cmd)) - args._path.indexOf("/cmd/web.wiki.word") > -1 && (args = {_path: pre+args.path}) - var url = can.misc.MergeURL(can, args) - can.user.copy(event, can, url) - can.onmotion.share(event, can, [], [mdb.LINK, url]) + "生成链接": function(event, can) { var meta = can.Conf(), args = can.Option() + args.cmd = meta.index||can.core.Keys(meta.ctx, meta.cmd), args.cmd == "web.wiki.word" && (args.cmd = args.path) + can.onmotion.share(event, can, [], [mdb.LINK, can.user.copy(event, can, can.misc.MergeURL(can, args))]) }, - "生成图片": function(event, can) { can.onmotion.toimage(event, can, can._name) }, - // "生成图片": function(event, can) { - // can.user.toPNG(can, "hi.png", can._target.outerHTML, can.Conf(html.HEIGHT), can.Conf(html.WIDTH)) - // }, - - "生成脚本": function(event, can, button) { var conf = can.Conf() - var args = can.Input("", true).join(ice.SP); var list = [ - "export ctx_dev="+location.origin+"; ctx_temp=$(mktemp); curl -fsSL $ctx_dev -o $ctx_temp;"+" source $ctx_temp "+(conf.index||"")+ice.SP+args, + "生成脚本": function(event, can) { var conf = can.Conf() + var args = can.Input("", true).join(ice.SP), list = [ + "export ctx_dev="+location.origin+"; ctx_temp=$(mktemp); curl -o $ctx_temp -fsSL $ctx_dev;"+" source $ctx_temp "+(conf.index||"")+ice.SP+args, "ish_sys_dev_run_command "+args, "ish_sys_dev_run_action", "ish_sys_dev_run_source", ] - var ui = can.user.toast(can, {title: button, duration: -1, width: -300, - content: '