diff --git a/frame.js b/frame.js index 11319932..26ebef6d 100644 --- a/frame.js +++ b/frame.js @@ -221,7 +221,7 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", _init: function(can, meta, list, can.onmotion.delay(can, function() { can.Update() }) }) }) - }; can.core.Next(can.base.getValid(can.core.Value(can, [chat.ONIMPORT, mdb.LIST]), can.base.Obj(meta.inputs, [])).concat([{type: html.BUTTON, name: cli.CLOSE}]), add) + }; can.core.Next((can.base.getValid(can.core.Value(can, [chat.ONIMPORT, mdb.LIST]), can.base.Obj(meta.inputs, []))||[]).concat([{type: html.BUTTON, name: cli.CLOSE}]), add) }, _action: function(can, list, action, meta) { list = can.base.Obj(can.base.getValid(list, can.core.Item(meta)), can.core.Value(can, [chat.ONACTION, mdb.LIST])); if (!list) { return } var _list = can.page.inputs(can, list); action = action||can._action, can.onmotion.clear(can, action), meta = meta||can.onaction||{} @@ -306,6 +306,7 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", _init: function(can, meta, list, can.page.Select(can, output, "input[type=button]", function(target) { if (target.value == target.name) { target.value = can.user.trans(can, target.name) } }) var mode= ["float", "full", "cmd"]; for (var i in mode) { if (can.page.ClassList.has(can, can._target, mode[i])) { sub.onlayout[mode[i]](sub); break } } + can.user.isMobile && can.isCmdMode() && can.page.style(can, can._output, html.MAX_HEIGHT, can.ConfHeight()) can.onaction._output(can, msg), can.base.isFunc(cb) && cb(msg) }, target: output}) }) @@ -504,7 +505,7 @@ Volcanos(chat.ONLAYOUT, {help: "页面布局", _init: function(can, target) { ta return } - var width = window.innerWidth, height = window.innerHeight + var width = can.page.width(), height = can.page.height() can.page.Select(can, target, can.page.Keys(html.FIELDSET_HEAD, html.FIELDSET_FOOT), function(field) { height -= field.offsetHeight }) @@ -527,18 +528,18 @@ Volcanos(chat.ONLAYOUT, {help: "页面布局", _init: function(can, target) { ta can.onengine.signal(can, chat.ONSIZE, can.request({}, {width: width, height: height})) }, background: function(can, url, target) { - can.page.style(can, target||can._root._target, html.BACKGROUND, url == "" || url == "void"? "": 'url("'+url+'")') + can.page.style(can, target||can._root._target, "background-image", url == "" || url == "void"? "": 'url("'+url+'")') }, figure: function(event, can, target, right) { if (!event || !event.target) { return {} } target = target||can._fields||can._target - var rect = event.target == document.body? {left: window.innerWidth/2, top: 200, right: window.innerWidth/2, bottom: 200}: event.target.getBoundingClientRect() + var rect = event.target == document.body? {left: can.page.width()/2, top: 200, right: can.page.width()/2, bottom: 200}: event.target.getBoundingClientRect() var layout = right? {left: rect.right, top: rect.top}: {left: rect.left, top: rect.bottom} can.getActionSize(function(left, top, width, height) { left = left||0, top = top||0 - if (layout.top+target.offsetHeight > window.innerHeight) { - layout.top = "", layout.bottom = can.base.Min(window.innerHeight-top-height, 0) - layout[html.MAX_HEIGHT] = window.innerHeight + if (layout.top+target.offsetHeight > can.page.height()) { + layout.top = "", layout.bottom = can.base.Min(can.page.height()-top-height, 0) + layout[html.MAX_HEIGHT] = can.page.height() layout["overflow"] = "auto" } - if (layout.left+target.offsetWidth > window.innerWidth) { layout.left = "", layout.right = 0 } + if (layout.left+target.offsetWidth > can.page.width()) { layout.left = "", layout.right = 0 } }) return can.onmotion.move(can, target, layout), layout }, @@ -599,7 +600,7 @@ Volcanos(chat.ONLAYOUT, {help: "页面布局", _init: function(can, target) { ta }, }) Volcanos(chat.ONMOTION, {help: "动态特效", _init: function(can, target) { - var last = window.innerWidth < window.innerHeight + var last = can.page.width() < can.page.height() window.onbeforeunload = function(event) { can.onengine.signal(can, "onunload") } @@ -608,10 +609,10 @@ Volcanos(chat.ONMOTION, {help: "动态特效", _init: function(can, target) { } window.onresize = function(event) { if (can.user.isMobile) { - if (last === window.innerWidth < window.innerHeight) { return } - last = window.innerWidth < window.innerHeight + if (last === can.page.width() < can.page.height()) { return } + last = can.page.width() < can.page.height() } - window.setsize && window.setsize(window.innerWidth, window.innerHeight) + window.setsize && window.setsize(can.page.width(), can.page.height()) can.onengine.signal(can, chat.ONRESIZE) } can.onmotion.float.auto(can, target) @@ -752,9 +753,10 @@ Volcanos(chat.ONMOTION, {help: "动态特效", _init: function(can, target) { can.onmotion.focus(can, target), can.onmotion.delay(can, function() { target.click() }) }}]) }, - toimage: function(event, can, name, target) { + 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.page.Create(can, html.A, {href: url, download: name+".png"}).click() } 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() diff --git a/lib/page.js b/lib/page.js index 89e2f346..207fcc97 100644 --- a/lib/page.js +++ b/lib/page.js @@ -313,7 +313,7 @@ Volcanos("page", {help: "用户界面", ClassList: { } }, replace: function(can, text, key, value) { - return can.base.replaceAll(text, "<", "<", ">", ">", key, value) + return can.base.replaceAll(text, "<", "<", ">", ">", key, value) }, Color: function(text) { if (typeof text != lang.STRING) { return "" } if (text.indexOf("http://") == 0 || text.indexOf("https://") == 0 || text.indexOf("ftp://") == 0) { @@ -473,4 +473,6 @@ Volcanos("page", {help: "用户界面", ClassList: { var item = can.base.isArray(list)? can.page.Append(can, parent, list).first: list return before && parent.insertBefore(item, before), item }, + height: function() { return window.innerHeight }, + width: function() { return window.innerWidth }, }) diff --git a/page/index.css b/page/index.css index e8aafd7b..bcb2c654 100644 --- a/page/index.css +++ b/page/index.css @@ -227,6 +227,7 @@ body.print fieldset.draw div.output div.content svg { background-color:lightgray body.print fieldset.draw div.output { background-color:lightgray; } body.mobile { overflow:auto; } +// body.mobile.black { background-color:black; } body.mobile.simple { overflow:hidden; } body.mobile legend { font-size:1.6rem; height:38px; } body.mobile select { font-size:1.4rem; height:38px; border-radius:0; margin-right:10; } diff --git a/panel/action.js b/panel/action.js index b19d48df..5791293e 100644 --- a/panel/action.js +++ b/panel/action.js @@ -1,143 +1,79 @@ -Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) { - var river = can.Conf(chat.RIVER), storm = can.Conf(chat.STORM) - can.onmotion.clear(can), can.core.Next(msg.Table(), function(item, next) { - item.inputs = can.base.Obj(item.inputs||item.list), - item.feature = can.base.Obj(item.feature||item.meta) - can.onappend.plugin(can, item, function(sub, meta, skip) { - can.onimport._plugin(can, river, storm, sub, meta), skip || next() - }) +Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onmotion.clear(can) + var river = can.Conf(chat.RIVER), storm = can.Conf(chat.STORM); can.core.Next(msg.Table(), function(item, next) { + item.inputs = can.base.Obj(item.inputs||item.list), item.feature = can.base.Obj(item.feature||item.meta) + can.onappend.plugin(can, item, function(sub, meta, skip) { can.onimport._plugin(can, river, storm, sub, meta), skip || next() }) }) }, _plugin: function(can, river, storm, sub, meta) { sub._target._meta = meta, sub._target._plugin = sub meta.id && (sub._option.dataset = sub._option.dataset||{}, sub._option.dataset.id = meta.id) sub.Mode(can.Mode()), can.page.style(can, sub._output, html.MAX_WIDTH, can.ConfWidth()) + sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth()) sub.run = function(event, cmds, cb) { (!cmds || cmds[0] != ctx.ACTION) && sub.request(event, {width: sub.ConfWidth(), height: sub.ConfHeight()}) return can.run(event, can.misc.concat(can, [river, storm, meta.id||meta.index], cmds), cb) - }, can._plugins = can.misc.concat(can, can._plugins, [sub]) - - var tabs = [{view: [html.TABS, html.DIV, meta.name], onclick: function(event) { - can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, sub._target) - can.onmotion.select(can, can._header_tabs, html.DIV_TABS, sub._header_tabs) - can.onmotion.select(can, can._action, html.DIV_TABS, sub._tabs) - if (sub._delay_refresh) { sub._delay_refresh = false; var button = can.Conf(chat.LAYOUT) - sub.onaction._resize(sub, button == "" || button == ice.AUTO, can.ConfHeight(), can.ConfWidth()) - } - }, onmouseenter: sub._legend.onmouseenter, ondblclick: sub._legend.onclick}] - - sub._header_tabs = can.page.Append(can, can._header_tabs, tabs).first - sub._tabs = can.page.Append(can, can._action, tabs).first + }, can._plugins = can.misc.concat(can, can._plugins, [sub]), can.onimport._tabs(can, sub, meta) }, _share: function(can, share) { share && can.run({}, [web.SHARE, share], function(msg) { - msg.Length() == 1? can.onengine.signal(can, chat.ONACTION_CMD): can.onlayout._init(can) - can.setHeader(chat.TOPIC, msg.SearchOrOption(chat.TOPIC)) - can.user.title(msg.SearchOrOption(chat.TITLE)) - can.Conf(chat.RIVER, web.SHARE, chat.STORM, share) - msg.Length() > 0 && can.onimport._init(can, msg) + msg.Length() == 1? can.onengine.signal(can, chat.ONACTION_CMD): can.onlayout._init(can); if (msg.Length() == 0) { return } + can.setHeader(chat.TOPIC, msg.SearchOrOption(chat.TOPIC)), can.user.title(msg.SearchOrOption(chat.TITLE)) + can.Conf(chat.RIVER, web.SHARE, chat.STORM, share), can.onimport._init(can, msg) }) }, _cmd: function(can, item, next) { can.onengine.signal(can, chat.ONACTION_CMD) can.onappend.plugin(can, can.base.Copy(item, {mode: "cmd", opts: can.misc.Search(can)}), function(sub, meta, skip) { sub.run = function(event, cmds, cb) { (!cmds || cmds[0] != ctx.ACTION) && can.request(event, {width: can.ConfWidth(), height: can.ConfHeight()}) - can.runActionCommand(event, sub._index, cmds, cb) } - can._plugins = can.misc.concat(can, can._plugins, [sub]) - can.user.title(meta.name), skip || next() + can.runActionCommand(event, sub._index, cmds, cb) + }, can._plugins = can.misc.concat(can, can._plugins, [sub]), can.user.title(meta.name), skip || next() }) }, + _tabs: function(can, sub, meta) { + var tabs = [{view: [html.TABS, html.DIV, meta.name], onclick: function(event) { + can.onmotion.select(can, can._header_tabs, html.DIV_TABS, sub._header_tabs) + can.onmotion.select(can, can._action, html.DIV_TABS, sub._tabs), can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, sub._target) + if (sub._delay_refresh) { sub._delay_refresh = false, sub.onaction._resize(sub, can.Conf(chat.LAYOUT) == "", can.ConfHeight(), can.ConfWidth()) } + }, onmouseenter: sub._legend.onmouseenter, ondblclick: sub._legend.onclick}] + sub._header_tabs = can.page.Append(can, can._header_tabs, tabs).first, sub._tabs = can.page.Append(can, can._action, tabs).first + }, _menu: function(can, msg) { if (can.user.mod.isPod || can.user.isMobile) { return } can.setHeaderMenu(can.base.Obj(can.Conf(chat.MENUS)||msg.Option(chat.MENUS), can.onaction._menus), function(event, button, list) { can.core.CallFunc([can.onaction, list[0]], [can, button]) }) can.page.Select(can, can._root.Header._output, "action", function(target) { - can._header_tabs = can.page.Append(can, target, ["tabs"]).first - can.onmotion.hidden(can, can._header_tabs) + can.onmotion.hidden(can, can._header_tabs = can.page.Append(can, target, ["tabs"]).first) }) }, }) -Volcanos(chat.ONENGINE, {help: "解析引擎", _engine: function(event, page, msg, can, cmds, cb) { - var storm = can.core.Value(can._root, can.core.Keys(chat.RIVER, cmds[0], chat.STORM, cmds[1])) - if (!storm || cmds.length != 2) { return false } - - if (storm.index) { // 命令索引 - can.runAction(event, ctx.COMMAND, [].concat(storm.index), cb) - } else { // 命令列表 - can.core.List(storm.list, function(value) { - msg.Push(mdb.NAME, value.name||"") - msg.Push(mdb.HELP, value.help||"") - msg.Push(ctx.INPUTS, JSON.stringify(value.inputs)) - msg.Push(ctx.FEATURE, JSON.stringify(value.feature)) - msg.Push(ctx.INDEX, value.index||"") - msg.Push(ctx.ARGS, value.args||"[]") - msg.Push(ctx.STYLE, value.style||"") - msg.Push(ctx.DISPLAY, value.display||"") - msg.Push(ice.MSG_ACTION, value._action||"") - }), can.base.isFunc(cb) && cb(msg) - } return true -}}) -Volcanos(chat.ONPLUGIN, {help: "注册插件", - "parse": shy("解析", { - "show": function(can, msg, cmds) { var name = cmds[1]||"can"; can.isCmdMode() && can.user.title(name) - cmds && cmds[0] && Volcanos(name, {_follow: can.core.Keys(can._follow, name)}, ["/plugin/story/parse.js"], function(sub) { - sub.run = can.run, sub.Option = function() {} - can.isCmdMode() && sub.ConfHeight(window.innerHeight) - can.onengine.listen(can, "menu", function(msg) { console.log(msg) }) - sub.onappend.parse(sub, sub.onappend._parse(sub, cmds[0], name, sub.ConfHeight()), can._output) - }) - }, - }, ["text", "name", "show:button@auto", "clear:button"]), - "plugin": shy("插件", {}, ["text", "list", "back"]), - - "nfs.save": shy("保存文件", { - "save": function(can, msg, cmds) { can.user.downloads(can, cmds[1], cmds[0]) } - }, ["file=hi.txt", "text:textarea='hello world'", "save:button"]), -}) -Volcanos(chat.ONKEYMAP, {help: "键盘交互", _focus: [], _init: function(can, target) { - can.onkeymap._build(can), can.onengine.listen(can, chat.ONKEYDOWN, function(msg, model) { - can._keylist = can.onkeymap._parse(msg._event, can, model, can._keylist||[], can._output) - }) +Volcanos(chat.ONKEYMAP, {_init: function(can, target) { can.onkeymap._build(can) + can.onengine.listen(can, chat.ONKEYDOWN, function(msg, model) { can._keylist = can.onkeymap._parse(msg._event, can, model, can._keylist||[], can._output) }) }, _mode: { normal: { - j: function(event, can, target) { target.scrollBy(0, event.ctrlKey? 300: 30) }, - k: function(event, can, target) { target.scrollBy(0, event.ctrlKey? -300: -30) }, + j: function(event, can) { can._output.scrollBy(0, event.ctrlKey? 300: 30) }, + k: function(event, can) { can._output.scrollBy(0, event.ctrlKey? -300: -30) }, - b: function(event, can, target) { can.search(event, ["Header.onaction.black"]) }, - w: function(event, can, target) { can.search(event, ["Header.onaction.white"]) }, + b: function(event, can) { can.search(event, ["Header.onaction.black"]) }, + 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) }, - g: function(event, can, target) { can.search(event, ["River.ondetail.创建群组"]) }, - s: function(event, can, target) { can.search(event, ["River.ondetail.添加应用"]) }, - t: function(event, can, target) { can.search(event, ["River.ondetail.添加工具"]) }, - - " ": function(event, can, target) { can.onengine.signal(can, chat.ONSEARCH_FOCUS), can.onkeymap.prevent(event) }, - ":": function(event, can, target) { can.onengine.signal(can, chat.ONCOMMAND_FOCUS), can.onkeymap.prevent(event) }, - Enter: function(event, can, target) { can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event)) }, - Escape: function(event, can, target) { - can.page.Select(can, can._root._target, can.page.Keys(html.FIELDSET_FLOAT, html.DIV_FLOAT), function(target) { - can.page.Remove(can, target) - }) - }, + " ": function(event, can) { can.onengine.signal(can, chat.ONSEARCH_FOCUS), can.onkeymap.prevent(event) }, + ":": function(event, can) { can.onengine.signal(can, chat.ONCOMMAND_FOCUS), can.onkeymap.prevent(event) }, + Enter: function(event, can) { can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event)) }, + Escape: function(event, can, target) { can.page.Select(can, document.body, can.page.Keys(html.FIELDSET_FLOAT, html.DIV_FLOAT), function(target) { can.page.Remove(can, target) }) }, }, }, _engine: {}, }) -Volcanos(chat.ONACTION, {help: "操作数据", _init: function(can, cb, target) { +Volcanos(chat.ONACTION, {_init: function(can, target) { + can.Conf(html.MARGIN_X, (can.user.isMobile? 2: 4)*html.PLUGIN_MARGIN) can.Conf(html.MARGIN_Y, 4*html.PLUGIN_MARGIN+2*html.ACTION_HEIGHT+html.ACTION_MARGIN) - can.Conf(html.MARGIN_X, 4*html.PLUGIN_MARGIN) - if (can.user.isMobile) { - can.Conf(html.MARGIN_Y, 4*html.PLUGIN_MARGIN+2*html.ACTION_HEIGHT+html.ACTION_MARGIN) - can.Conf(html.MARGIN_X, 2*html.PLUGIN_MARGIN) - } - if (can.user.mod.isPod || can.user.isMobile) { - var gt = "❯", lt = "❮"; function toggle(view) { return can.onmotion.toggle(can, can._root.River._target) } + if (can.user.isMobile || can.user.mod.isPod) { var gt = "❯", lt = "❮" + function toggle(view) { return can.onmotion.toggle(can, can._root.River._target) } can.page.Append(can, target, [{view: [[html.TOGGLE, chat.PROJECT]], list: [{text: [gt, html.DIV]}], onclick: function(event) { event.target.innerHTML = toggle()? gt: lt, can.onaction.layout(can, can.Conf(chat.LAYOUT)) }}]) - } - - target.ontouchstart = function(event) { can.onengine.signal(can, chat.ONACTION_TOUCH, can.request(event)) } - can.base.isFunc(cb) && cb() + } target.ontouchstart = function(event) { can.onengine.signal(can, chat.ONACTION_TOUCH, can.request(event)) } }, _menus: [ - [chat.LAYOUT, "auto", "tabs", "tabview", "horizon", "vertical", "grid", "flow", "free", "page", "toimage"], + [chat.LAYOUT, "auto", "tabs", "tabview", "horizon", "vertical", "free", "grid", "flow", "page"], [ice.HELP, "tutor", "manual", "service", "devops", "refer"], ], _trans: { @@ -147,11 +83,10 @@ Volcanos(chat.ONACTION, {help: "操作数据", _init: function(can, cb, target) "tabview": "标签分屏", "horizon": "左右分屏", "vertical": "上下分屏", - "grid": "网格布局", - "flow": "流动布局", "free": "自由布局", + "flow": "流动布局", + "grid": "网格布局", "page": "网页布局", - "toimage": "生成图片", "help": "帮助", "tutor": "入门简介", @@ -177,19 +112,16 @@ Volcanos(chat.ONACTION, {help: "操作数据", _init: function(can, cb, target) } can.run({}, [river, storm], function(msg) { if (msg.Length() == 0) { return can.onengine.signal(can, chat.ONACTION_NOTOOL, can.request({}, {river: river, storm: storm})) } - can.onaction.layout(can, can.misc.SearchOrConf(can, chat.LAYOUT)||Volcanos.meta.args.layout, true) - can.onimport._menu(can, msg), can.onkeymap._init(can) - return can.onimport._init(can, msg) + can.onaction.layout(can, can.misc.SearchOrConf(can, chat.LAYOUT)||Volcanos.meta.args.layout, true), can.onkeymap._init(can) + return can.onimport._menu(can, msg), can.onimport._init(can, msg) }) }, onaction_cmd: function(can, msg) { can.Mode("cmd") can.Conf(html.MARGIN_Y, 2*html.ACTION_HEIGHT), can.Conf(html.MARGIN_X, 0) - can.ConfHeight(can._root._height-can.Conf(html.MARGIN_Y)), can.ConfWidth(can._root._width) - can.page.style(can, can._target, html.HEIGHT, can._root._height, html.WIDTH, can._root._width) - can.page.ClassList.add(can, can._root._target, "simple") - can.page.ClassList.add(can, can._target, "cmd") + can.ConfHeight(can.page.height()-can.Conf(html.MARGIN_Y)), can.ConfWidth(can.page.width()) + can.page.style(can, can._target, html.HEIGHT, can.page.height(), html.WIDTH, can.page.width()) + can.page.ClassList.add(can, can._target, "cmd"), can.page.ClassList.add(can, can._root._target, "simple") }, - onsearch: function(can, msg, word) { if (word[0] == mdb.FOREACH || word[0] == mdb.PLUGIN) { can.onexport.plugin(can, msg, word) } }, onkeydown: function(can, msg) { var event = msg._event if (event.ctrlKey && event.key >= "1" && event.key <= "9") { can.onmotion.select(can, can._action, html.DIV_TABS, parseInt(event.key)-1) @@ -197,48 +129,37 @@ Volcanos(chat.ONACTION, {help: "操作数据", _init: function(can, cb, target) can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, parseInt(event.key)-1) } }, - onsize: function(can, msg, height, width) { can.Conf({height: height-can.Conf(html.MARGIN_Y), width: width-can.Conf(html.MARGIN_X)}) }, - onprint: function(can, msg) { can.page.styleHeight(can, can._target, "") }, onresize: function(can, msg) { can.onlayout._init(can), can.onaction.layout(can, can.Conf(chat.LAYOUT)) }, + onsize: function(can, msg, height, width) { can.Conf({height: height-can.Conf(html.MARGIN_Y), width: width-can.Conf(html.MARGIN_X)}) }, + onsearch: function(can, msg, word) { if (word[0] == mdb.FOREACH || word[0] == mdb.PLUGIN) { can.onexport.plugin(can, msg, word) } }, + onprint: function(can, msg) { can.page.styleHeight(can, can._target, "") }, layout: function(can, button, silent) { button = button||ice.AUTO can.page.ClassList.del(can, can._target, can.Conf(chat.LAYOUT)); if (button == ice.AUTO) { button = "" } can.page.ClassList.add(can, can._target, can.Conf(chat.LAYOUT, button)) - // can.isCmdMode() || (can.onmotion.toggle(can, can._root.River._target, true), can.onmotion.toggle(can, can._root.Footer._target, true)) can._header_tabs && can.onmotion.hidden(can, can._header_tabs) - can.onlayout._init(can) - var cb = can.onlayout[button]; if (can.base.isFunc(cb)? cb(can, silent): (function() {})()) { return } - (button == "" && can.user.isMobile) || can.page.style(can, can._target, html.HEIGHT, can.ConfHeight()+can.Conf(html.MARGIN_Y), html.WIDTH, can.ConfWidth()+can.Conf(html.MARGIN_X)) - can.core.Next(can._plugins, function(sub, next) { can.onmotion.delay(can, function() { - sub.onaction._resize(sub, button == "" || button == ice.AUTO, can.ConfHeight(), can.ConfWidth()), next() - if (button == "") { can.page.style(can, sub._output, html.MAX_HEIGHT, "") } - }, 10) }) + can.user.isMobile || can.isCmdMode() || (can.onmotion.toggle(can, can._root.River._target, true), can.onmotion.toggle(can, can._root.Footer._target, true)) + can.onlayout._init(can); var cb = can.onlayout[button]; if (can.base.isFunc(cb) && cb(can, silent)) { return } + // (can.user.isMobile && button == "") || can.page.style(can, can._target, html.HEIGHT, can.ConfHeight()+can.Conf(html.MARGIN_Y), html.WIDTH, can.ConfWidth()+can.Conf(html.MARGIN_X)) + can.core.Next(can._plugins, function(sub, next) { can.onmotion.delay(can, function() { sub.onaction._resize(sub, button == "" || button == "free" || button == "flow", can.ConfHeight(), can.ConfWidth()), next() }, 10) }) }, help: function(can, button) { can.user.open("/help/"+button+".shy") }, }) Volcanos(chat.ONLAYOUT, {help: "界面布局", tabs: function(can) { - can.getActionSize(function(height, width) { - can.ConfHeight(height-2*html.ACTION_HEIGHT-4*html.PLUGIN_MARGIN-1), can.ConfWidth(width-4*html.PLUGIN_MARGIN) - }) + can.getActionSize(function(height, width) { can.ConfHeight(height-2*html.ACTION_HEIGHT-can.Conf(html.MARGIN_X)), can.ConfWidth(width-can.Conf(html.MARGIN_X)) }) if (can.page.Select(can, can._output, "fieldset.plugin.select").length > 0) { return } can.onmotion.select(can, can._action, html.DIV_TABS, 0), can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, 0) }, tabview: function(can) { can.onmotion.toggle(can, can._header_tabs, true) can.onmotion.hidden(can, can._root.River._target), can.onmotion.hidden(can, can._root.Footer._target), can.onlayout._init(can) - can.getActionSize(function(height, width) { can.ConfHeight(height-html.ACTION_HEIGHT), can.ConfWidth(width) }) + can.getActionSize(function(height, width) { can.ConfHeight(height), can.ConfWidth(width) }) can.core.List(can._plugins, function(sub) { sub._delay_refresh = true }) - if (can.page.Select(can, can._output, "fieldset.plugin.select", function(target) { - target._plugin._header_tabs.click() - return target - }).length == 0) { - can.onmotion.select(can, can._header_tabs, html.DIV_TABS, 0, function(target) { - target.click() - }), can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, 0) - } - return true + if (can.page.Select(can, can._output, "fieldset.plugin.select", function(target) { return target._plugin._header_tabs.click(), target }).length == 0) { + can.onmotion.select(can, can._header_tabs, html.DIV_TABS, 0, function(target) { target.click() }), can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, 0) + } return true }, horizon: function(can) { can.onmotion.hidden(can, can._root.River._target), can.onmotion.hidden(can, can._root.Footer._target), can.onlayout._init(can) @@ -248,34 +169,22 @@ Volcanos(chat.ONLAYOUT, {help: "界面布局", can.onmotion.hidden(can, can._root.River._target), can.onmotion.hidden(can, can._root.Footer._target), can.onlayout._init(can) can.getActionSize(function(height, width) { can.ConfHeight(height/2), can.ConfWidth(width) }) }, + free: function(can) { + can.getActionSize(function(height, width) { can.ConfHeight(height-2*html.ACTION_HEIGHT-can.Conf(html.MARGIN_X)), can.ConfWidth(width-can.Conf(html.MARGIN_X)) }) + can.page.Select(can, can._target, [[html.DIV_OUTPUT, html.FIELDSET_PLUGIN]], function(item, index) { can.onmotion.move(can, item, {left: 40*index, top: 40*index}) }) + }, _grid: function(can, m, n) { can.getActionSize(function(height, width) { var h = (height-(4*n+1)*html.PLUGIN_MARGIN)/n, w = (width-(4*m+1)*html.PLUGIN_MARGIN)/m can.ConfHeight(h-2*html.ACTION_HEIGHT-3*html.PLUGIN_MARGIN), can.ConfWidth(w) + can.core.Next(can._plugins, function(sub, next) { can.onmotion.delay(can, function() { sub.onaction._resize(sub, false, can.ConfHeight(), can.ConfWidth()), next() }, 10) }) }) }, grid: function(can, silent) { - can.user.input(event, can, [{name: "m", value: 2}, {name: "n", value: 2}], function(data) { - can.onlayout._grid(can, parseInt(data.m), parseInt(data.n)) - }, silent) - return true - }, - free: function(can) { - can.page.Select(can, can._target, [[html.DIV_OUTPUT, html.FIELDSET_PLUGIN]], function(item, index) { - can.onmotion.move(can, item, {left: 40*index, top: 40*index}) - }) - }, - toimage: function(can) { - return can.onmotion.toimage(event, can, can.Conf(chat.STORM), can._output), true + return can.user.input(event, can, [{name: "m", value: 2}, {name: "n", value: 2}], function(data) { can.onlayout._grid(can, parseInt(data.m), parseInt(data.n)) }, silent), true }, }) Volcanos(chat.ONEXPORT, {help: "导出数据", - args: function(can, msg, cb, target) { - can.core.Next(can.page.Select(can, target, [[html.FIELDSET_PLUGIN, html.FORM_OPTION]]), function(item, next, index, array) { - item.dataset.args = JSON.stringify(can.page.Select(can, item, html.OPTION_ARGS, function(item) { return item.value||"" })) - cb(item, next, index, array) - }) - }, size: function(can, msg) { msg.Option(html.TOP, can._output.offsetTop) msg.Option(html.LEFT, can._output.offsetLeft) @@ -285,11 +194,15 @@ Volcanos(chat.ONEXPORT, {help: "导出数据", msg.Option(html.MARGIN_X, can.Conf(html.MARGIN_X)) msg.Option(html.MARGIN_Y, can.Conf(html.MARGIN_Y)) }, + args: function(can, msg, cb, target) { + can.core.Next(can.page.Select(can, can._target, [[html.DIV_OUTPUT, html.FIELDSET_PLUGIN, html.FORM_OPTION]]), function(item, next, index, array) { + item.dataset.args = JSON.stringify(can.page.Select(can, item, html.OPTION_ARGS, function(item) { return item.value||"" })), cb(item, next, index, array) + }) + }, layout: function(can, msg) { return can.Conf(chat.LAYOUT) }, plugin: function(can, msg, word) { var fields = can.core.Split(msg.Option(ice.MSG_FIELDS)) can.page.Select(can, can._output, [[html.FIELDSET_PLUGIN, html.LEGEND]], function(item) { if (item.innerHTML.indexOf(word[1]) == -1) { return } - var list = can.page.Select(can, item.nextSibling, html.OPTION_ARGS, function(item) { return item.value||"" }) var meta = item.parentNode._meta; if (!meta) { return } @@ -304,8 +217,39 @@ Volcanos(chat.ONEXPORT, {help: "导出数据", data.context = meta.ctx, data.command = meta.cmd } else { return - } - msg.Push(data, fields) + } msg.Push(data, fields) }) }, }) +Volcanos(chat.ONENGINE, {help: "解析引擎", _engine: function(event, sup, msg, can, cmds, cb) { + var storm = can.core.Value(can._root, can.core.Keys(chat.RIVER, cmds[0], chat.STORM, cmds[1])); if (!storm || cmds.length != 2) { return false } + if (storm.index) { can.runAction(event, ctx.COMMAND, [].concat(storm.index), cb) } else { + can.core.List(storm.list, function(value) { + msg.Push(mdb.NAME, value.name||"") + msg.Push(mdb.HELP, value.help||"") + msg.Push(ctx.INPUTS, JSON.stringify(value.inputs)) + msg.Push(ctx.FEATURE, JSON.stringify(value.feature)) + msg.Push(ctx.INDEX, value.index||"") + msg.Push(ctx.ARGS, value.args||"[]") + msg.Push(ctx.STYLE, value.style||"") + msg.Push(ctx.DISPLAY, value.display||"") + msg.Push(ice.MSG_ACTION, value._action||"") + }), can.base.isFunc(cb) && cb(msg) + } return true +}}) +Volcanos(chat.ONPLUGIN, {help: "注册插件", + "plugin": shy("默认插件", {}, ["name", "list", "back"]), + "parse": shy("生成网页", { + "show": function(can, msg, cmds) { var name = cmds[1]||"can"; can.isCmdMode() && can.user.title(name) + cmds && cmds[0] && Volcanos(name, {_follow: can.core.Keys(can._follow, name)}, ["/plugin/story/parse.js"], function(sub) { + sub.run = can.run, sub.Option = function() {} + can.isCmdMode() && sub.ConfHeight(can.page.height()) + can.onengine.listen(can, "menu", function(msg) { console.log(msg) }) + sub.onappend.parse(sub, sub.onappend._parse(sub, cmds[0], name, sub.ConfHeight()), can._output) + }) + }, + }, ["text", "name", "show:button@auto", "clear:button"]), + "nfs.save": shy("保存文件", { + "save": function(can, msg, cmds) { can.user.downloads(can, cmds[1], cmds[0]) } + }, ["file=hi.txt", "text:textarea='hello world'", "save:button"]), +}) diff --git a/panel/header.js b/panel/header.js index 227a4229..2083b9cb 100644 --- a/panel/header.js +++ b/panel/header.js @@ -192,7 +192,7 @@ Volcanos(chat.ONACTION, {help: "交互数据", 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) }, webpack: function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) }, - toimage: function(event, can, button) { can.onmotion.toimage(event, can, can.user.title(), can._target.parentNode) }, + toimage: function(event, can) { can.onmotion.toimage(event, can, can.user.title(), can._target.parentNode) }, 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||[])) }, diff --git a/plugin/input/key.js b/plugin/input/key.js index b200bc5d..ca6f8329 100644 --- a/plugin/input/key.js +++ b/plugin/input/key.js @@ -28,7 +28,7 @@ Volcanos(chat.ONFIGURE, {key: { }} }), can.onappend._status(can, [mdb.TOTAL, mdb.INDEX]), can.Status(mdb.TOTAL, msg.Length()) can.getActionSize(function(left, top, width, height) { left = left||0, top = top||0 - can.page.style(can, can._target, html.MAX_HEIGHT, can.base.Max(window.innerHeight-can._target.offsetTop-html.ACTION_HEIGHT, 600)) + can.page.style(can, can._target, html.MAX_HEIGHT, can.base.Max(can.page.height()-can._target.offsetTop-html.ACTION_HEIGHT, 600)) }) }, _make: function(event, can, meta, cb, target, last) { diff --git a/plugin/local/chat/div.js b/plugin/local/chat/div.js index b9bf044b..556fb87e 100644 --- a/plugin/local/chat/div.js +++ b/plugin/local/chat/div.js @@ -43,7 +43,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar can.onmotion.clear(can, target), can.onlayout.profile(can, target), can.ui.project._target = can.ui.content var width = can.ConfWidth()-320, height = can.ConfHeight() if (can.isCmdMode()) { - width = can._root._width, height = can._root._height, can.user.title(can._list.meta.name) + width = can.page.width(), height = can.page.height(), can.user.title(can._list.meta.name) } else if (can.isFullMode()) { width = can.ConfWidth(), height = can.ConfHeight() can.onmotion.toggle(can, can.ui.project, false) diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index a8aa8f4f..666976d4 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -415,7 +415,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar }, layout: function(can) { if (can.isSimpleMode()) { return can.page.style(can, can.ui.content, html.WIDTH, can.ConfWidth()) } - if (can.isCmdMode()) { can.ConfHeight(window.innerHeight), can.ConfWidth(window.innerWidth) } + if (can.isCmdMode()) { can.ConfHeight(can.page.height()), can.ConfWidth(can.page.width()) } can.isFloatMode() && can.onmotion.hidden(can, can.ui.profile) var width = can.ConfWidth()+(can.user.isMobile && can.isCmdMode() && can.user.isLandscape()? 16: 0)-(can.user.isWindows && !can.isCmdMode()? 20: 0) @@ -426,7 +426,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar can.page.styleWidth(can, can.ui.profile_output, profile_width) can.page.styleWidth(can, can.ui.display_output, width-project_width) - var height = can.user.isMobile && can.isFloatMode()? window.innerHeight-2*html.ACTION_HEIGHT: can.base.Min(can.ConfHeight(), 320)-1 + var height = can.user.isMobile && can.isFloatMode()? can.page.height()-2*html.ACTION_HEIGHT: can.base.Min(can.ConfHeight(), 320)-1 var display_height = can.ui.display.style.display == html.NONE? 0: (can.display_size[can.onexport.keys(can)]||height/2-html.ACTION_HEIGHT) var content_height = height-display_height; if (can.isCmdMode()) { content_height -= can.ui._tabs.offsetHeight + can.ui._path.offsetHeight + 4 } var profile_height = height-html.ACTION_HEIGHT-display_height diff --git a/plugin/local/team/plan.js b/plugin/local/team/plan.js index 0b2d192a..4c056104 100644 --- a/plugin/local/team/plan.js +++ b/plugin/local/team/plan.js @@ -110,10 +110,10 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( can.onimport._content(can, msg, head, list, key, get, set) }, layout: function(can) { - can.onmotion.toggle(can, can._action, !can.isFloatMode() && !(can.user.isMobile && window.innerHeight < window.innerWidth)) - can.onmotion.toggle(can, can._status, !can.isFloatMode() && !(can.user.isMobile && window.innerHeight < window.innerWidth)) + can.onmotion.toggle(can, can._action, !can.isFloatMode() && !(can.user.isMobile && can.page.height() < can.page.width())) + can.onmotion.toggle(can, can._status, !can.isFloatMode() && !(can.user.isMobile && can.page.height() < can.page.width())) can.page.styleWidth(can, can.ui.content, can.ConfWidth()-can.ui.project.offsetWidth-can.ui.profile.offsetWidth) - if (can.isCmdMode() || can.isFullMode() || can.isFloatMode() || can.isPlugType()) { can.page.styleHeight(can, can._output, can.ConfHeight()) + if (!can.isAutoMode() || can.isPlugType()) { can.page.styleHeight(can, can._output, can.ConfHeight()) var height = can._display_heights[can.sup.task? [can.sup.task.zone, can.sup.task.id].join(ice.FS): ""]||200 if (can.ui.display.innerHTML && can.ui.display.style.display != html.NONE) { can.page.style(can, can.ui.content, html.HEIGHT, can.ConfHeight()-height) diff --git a/plugin/local/wiki/feel.js b/plugin/local/wiki/feel.js index 98e5831e..532e8fa8 100644 --- a/plugin/local/wiki/feel.js +++ b/plugin/local/wiki/feel.js @@ -83,7 +83,7 @@ Volcanos(chat.ONACTION, {help: "组件菜单", list: [ can.page.Append(can, can._output, [{img: item, height: 200}]) }) }) }, - record1: function(event, can) { var height = window.innerHeight, width = window.innerWidth + record1: function(event, can) { var height = can.page.height(), width = can.page.width() can.user.input(event, can, [{type: "text", name: "file", value: "some"}], function(list) { navigator.mediaDevices.getDisplayMedia({video: {height: height}}).then(function(stream) { var video = can.page.Append(can, can._output, [{type: html.VIDEO, height: height}]).first diff --git a/plugin/local/wiki/word.css b/plugin/local/wiki/word.css index 3f0d39da..237fe3f1 100644 --- a/plugin/local/wiki/word.css +++ b/plugin/local/wiki/word.css @@ -1,6 +1,6 @@ fieldset.word form.option input[name=path] { width:127px; } fieldset.word>form.option>div.item>input[name=path] { width:320px; } -body.mobile fieldset.word>form.option>div.item>input[name=path] { width:220px; } +body.mobile fieldset.word>form.option>div.item>input[name=path] { width:180px; } body.webview fieldset.word>form.option>div.item>input[name=path] { width:160px; } fieldset.word>div.navmenu { background-color:inherit; overflow:auto; min-width:120px; clear:both; float:left; } @@ -38,7 +38,7 @@ fieldset.word.float { padding:0; margin:0; position:fixed; left:0; top:0; z-inde /* fieldset.word.float { padding:0; margin:0; width:-webkit-fill-available; position:fixed; left:0; top:0; z-index:10; } */ fieldset.word.float>div.action { display:contents; } fieldset.word.float>div.status { clear:none; display:block; } -fieldset.word.float>div.output { background-color:#f0f8ff80; overflow:auto; } +fieldset.word.float>div.output { background-color:#f0f8ff80; text-align:center; overflow:auto; } fieldset.word.float>div.output>div.project { background:#4682b46b; padding:10px; position:fixed; right:0; top:31px; z-index:10; } fieldset.word.float div.content div.page { text-align:center; margin-top:31px; display:none; } fieldset.word.float div.content div.page.show { display:block; } diff --git a/plugin/local/wiki/word.js b/plugin/local/wiki/word.js index 24cee002..92a4aeb4 100644 --- a/plugin/local/wiki/word.js +++ b/plugin/local/wiki/word.js @@ -8,6 +8,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar can.page.style(can, item, can.base.Obj(data.style)) can.core.CallFunc([can.onimport, data.type], [can, data, item]) }) + can.user.isMobile && can.isCmdMode() && can.page.style(can, can._output, html.MAX_HEIGHT, can.ConfHeight()+2*html.ACTION_HEIGHT) }, navmenu: function(can, data, target) { var nav = can.sup._navmenu nav = nav||can.page.Append(can, can._fields, [wiki.NAVMENU]).first @@ -165,7 +166,7 @@ Volcanos(chat.ONACTION, {help: "控件交互", }) can.onappend._init(can, {type: "story word float"}, [], function(sub) { - sub.run = can.run, sub.sup = can, can.sub = sub, can.onappend._action(sub, can.user.isMobile && window.innerHeight > window.innerWidth? [ + sub.run = can.run, sub.sup = can, can.sub = sub, can.onappend._action(sub, can.user.isMobile && can.page.height() > can.page.width()? [ "大纲", "上一页", "下一页", "结束", ]: [ ["布局", "开讲", "网格", "快闪"], "大纲", "首页", "上一页", @@ -178,8 +179,8 @@ Volcanos(chat.ONACTION, {help: "控件交互", }})), can.onkeymap._build(can) sub.page.style(sub, sub._target, html.BACKGROUND, can._root._target.style.background) - sub.page.style(sub, sub._output, html.HEIGHT, can._root._height-2*html.ACTION_HEIGHT) - sub.page.style(sub, sub._output, html.WIDTH, can._root._width) + sub.page.style(sub, sub._output, html.HEIGHT, can.page.height()-2*html.ACTION_HEIGHT) + sub.page.style(sub, sub._output, html.WIDTH, can.page.width()) sub.ui = sub.page.Append(sub, sub._output, [{view: chat.PROJECT}, {view: chat.CONTENT}]) can.core.List(sub.list = list, function(page, index) { @@ -193,7 +194,7 @@ Volcanos(chat.ONACTION, {help: "控件交互", case chat.FIELD: item = can.onappend.field(can, chat.STORY, can.base.Obj(data.meta), sub.ui.content).first; break default: item = item.cloneNode(true) } - return can.core.CallFunc([can.onimport, data.type], [sub, data, item, window.innerWidth]), item + return can.core.CallFunc([can.onimport, data.type], [sub, data, item, can.page.width()]), item }), }]) }), can.onmotion.hidden(can, sub.ui.project), can.ondetail.show(sub, 0) diff --git a/plugin/state.js b/plugin/state.js index d33c2835..da65eefb 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -46,7 +46,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _process: function(can, msg) { sub.run = function(event, cmds, cb) { can.runAction(can.request(event, {path: msg.Option(nfs.PATH), text: msg.Option(mdb.TEXT)}), [ice.RUN, msg._arg[0]], cmds, cb) } can.getActionSize(function(left, top, width, height) { left = left||0 var top = can.Mode() == undefined? 120: 0; if (can.user.isMobile) { top = can.user.isLandscape()? 0: 48 } - sub.onimport.size(sub, can.base.Max(height, window.innerHeight)-top-2*html.ACTION_HEIGHT-(can.user.isMobile&&!can.user.isLandscape()? 2*html.ACTION_HEIGHT: 0), width, true) + sub.onimport.size(sub, can.base.Max(height, can.page.height())-top-2*html.ACTION_HEIGHT-(can.user.isMobile&&!can.user.isLandscape()? 2*html.ACTION_HEIGHT: 0), width, true) can.onmotion.move(can, sub._target, {left: left, top: top}) }) }, document.body) }); return true @@ -85,15 +85,14 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _process: function(can, msg) { size: function(can, height, width, auto, mode) { // height += html.ACTION_HEIGHT-can.onexport.statusHeight(can) if (auto) { - height && can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, "", html.MAX_HEIGHT, can.ConfHeight(height), html.MAX_WIDTH, can.ConfWidth(width)) + // height && can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, "", html.MAX_HEIGHT, can.ConfHeight(height), html.MAX_WIDTH, can.ConfWidth(width)) + height && can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, "", html.MAX_HEIGHT, "", html.MAX_WIDTH, can.ConfWidth(width)) } else { can.page.style(can, can._output, html.HEIGHT, can.ConfHeight(height), html.WIDTH, can.ConfWidth(width), html.MAX_HEIGHT, "", html.MAX_WIDTH, "") } var sub = can.core.Value(can, chat._OUTPUTS_CURRENT); if (!sub) { return } sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth()) if (mode) { sub.Mode(can.Mode(mode)), sub.onlayout[mode](sub) } else { can.onaction["刷新页面"]({}, can, "刷新页面", sub) } - if (can.user.isMobile) { - can.onmotion.toggle(can, can._action, can.ConfHeight() < can.ConfWidth()-100) - } + can.user.isMobile && can.onmotion.toggle(can, can._action, can.ConfHeight() < can.ConfWidth()-100) }, title: function(can, title) { can.isCmdMode() && can.user.title(title) @@ -131,8 +130,8 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [ can._status_bak = can._status.style.display == "" can.onmotion.hidden(can, can._action) can.onmotion.hidden(can, can._status) - can.ConfHeight(window.innerHeight/2-2*html.ACTION_HEIGHT-can.onexport.statusHeight(can)), html.WIDTH, can.ConfWidth(window.innerWidth/(can.user.isMobile? 1: 2)) - can.getActionSize(function(left) { can.onmotion.move(can, can._target, {left: (left||0)+html.PLUGIN_MARGIN, top: window.innerHeight/2-html.PLUGIN_MARGIN}) }) + can.ConfHeight(can.page.height()/2-2*html.ACTION_HEIGHT-can.onexport.statusHeight(can)), html.WIDTH, can.ConfWidth(can.page.width()/(can.user.isMobile? 1: 2)) + can.getActionSize(function(left) { can.onmotion.move(can, can._target, {left: (left||0)+(can.user.isMobile? 0: html.PLUGIN_MARGIN), top: can.page.height()/2-html.PLUGIN_MARGIN}) }) }, function() { can.onmotion.toggle(can, can._action, can._action_bak) can.onmotion.toggle(can, can._status, can._status_bak) @@ -140,9 +139,9 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [ }) }, "切换全屏": function(event, can, button, sub) { - can.onaction._switch(can, sub, "full", function() { can.ConfWidth(window.innerWidth) + can.onaction._switch(can, sub, "full", function() { can.ConfWidth(can.page.width()) can.page.style(can, can._target, html.LEFT, "", html.BOTTOM, "") - can.ConfHeight(window.innerHeight-html.ACTION_HEIGHT-can.onexport.statusHeight(can)) + can.ConfHeight(can.page.height()-html.ACTION_HEIGHT-can.onexport.statusHeight(can)) }, function() {}) }, "共享工具": function(event, can) { var meta = can.Conf() @@ -171,8 +170,6 @@ Volcanos(chat.ONACTION, {help: "交互操作", 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", ] - can.user.toastScript(can, '
'+ - ''+''+list.join("
")+''+'
', conf.index+ice.SP+args) can.user.copy(event, can, list[0]) }, "生成图片": function(event, can) { can.onmotion.toimage(event, can, can._name) }, diff --git a/plugin/story/parse.js b/plugin/story/parse.js index 0ba5f97a..ff760be4 100644 --- a/plugin/story/parse.js +++ b/plugin/story/parse.js @@ -9,7 +9,7 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", list: ["{", "}", html.HEAD, html. can.onappend.list.indexOf(ls[0]) > -1 || can.onappend[ls[0]]? item.type = ls[0]: item.name = ls[0] for (var i = 1; i < ls.length; i += 2) { can.core.Value(item, ls[i], ls[i+1]) } }) - return {type: name, style: {height: height||can.ConfHeight()||window.innerHeight}, list: stack[0].list} + return {type: name, style: {height: height||can.ConfHeight()||can.page.height()}, list: stack[0].list} }, parse: function(can, list, target, keys, data, type) { target = target||can._output, data = data||{} if (!list) { return } else if (can.base.isArray(list)) { diff --git a/plugin/story/trend.js b/plugin/story/trend.js index ef96d3e2..438d14bb 100644 --- a/plugin/story/trend.js +++ b/plugin/story/trend.js @@ -134,6 +134,6 @@ Volcanos(chat.ONEXPORT, {help: "导出数据", list: ["from", "commit", "total", // can.isFullMode() || (height = can.base.Max(can.ConfHeight(), 600)) } if (height < 200) { height = 200 } - return parseInt(height||can._root._height/2) + return parseInt(height||can.page.height()/2) }, }) diff --git a/proto.js b/proto.js index d519d4dc..51d3d554 100644 --- a/proto.js +++ b/proto.js @@ -435,6 +435,7 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", pack: isFloatMode: function(value) { return can.Mode() == "float" }, isFullMode: function(value) { return can.Mode() == "full" }, isCmdMode: function(value) { return can.Mode() == "cmd" }, + isAutoMode: function(value) { return can.Mode() == "" }, Mode: function(value) { return can.Conf(ice.MODE, value) }, ConfDefault: function(value) { can.core.Item(value, function(k, v) { can.Conf(k) || can.Conf(k, v) }) }, ConfHeight: function(value) { return can.Conf(html.HEIGHT, value) },