1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-26 01:04:06 +08:00

opt action.js

This commit is contained in:
harveyshao 2022-10-23 23:43:53 +08:00
parent a520cd25f8
commit 81928d6aaf
16 changed files with 146 additions and 198 deletions

View File

@ -221,7 +221,7 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", _init: function(can, meta, list,
can.onmotion.delay(can, function() { can.Update() }) 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 } _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||{} 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) } }) 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 } } 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) can.onaction._output(can, msg), can.base.isFunc(cb) && cb(msg)
}, target: output}) }, target: output})
}) })
@ -504,7 +505,7 @@ Volcanos(chat.ONLAYOUT, {help: "页面布局", _init: function(can, target) { ta
return 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) { can.page.Select(can, target, can.page.Keys(html.FIELDSET_HEAD, html.FIELDSET_FOOT), function(field) {
height -= field.offsetHeight 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})) can.onengine.signal(can, chat.ONSIZE, can.request({}, {width: width, height: height}))
}, },
background: function(can, url, target) { 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 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} 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 can.getActionSize(function(left, top, width, height) { left = left||0, top = top||0
if (layout.top+target.offsetHeight > window.innerHeight) { if (layout.top+target.offsetHeight > can.page.height()) {
layout.top = "", layout.bottom = can.base.Min(window.innerHeight-top-height, 0) layout.top = "", layout.bottom = can.base.Min(can.page.height()-top-height, 0)
layout[html.MAX_HEIGHT] = window.innerHeight layout[html.MAX_HEIGHT] = can.page.height()
layout["overflow"] = "auto" 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 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) { 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) { window.onbeforeunload = function(event) {
can.onengine.signal(can, "onunload") can.onengine.signal(can, "onunload")
} }
@ -608,10 +609,10 @@ Volcanos(chat.ONMOTION, {help: "动态特效", _init: function(can, target) {
} }
window.onresize = function(event) { window.onresize = function(event) {
if (can.user.isMobile) { if (can.user.isMobile) {
if (last === window.innerWidth < window.innerHeight) { return } if (last === can.page.width() < can.page.height()) { return }
last = window.innerWidth < window.innerHeight 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.onengine.signal(can, chat.ONRESIZE)
} }
can.onmotion.float.auto(can, target) 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() }) 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() { 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") 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, 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) { action: shy({}, [cli.CLOSE, "download"], function(event, button) {
can.user.input(event, can, [{name: mdb.NAME, value: name}], function(list) { toast.close() can.user.input(event, can, [{name: mdb.NAME, value: name}], function(list) { toast.close()

View File

@ -313,7 +313,7 @@ Volcanos("page", {help: "用户界面", ClassList: {
} }
}, },
replace: function(can, text, key, value) { replace: function(can, text, key, value) {
return can.base.replaceAll(text, "<", "&lt;", ">", "&gt;", key, value) return can.base.replaceAll(text, "<", "<", ">", ">", key, value)
}, },
Color: function(text) { if (typeof text != lang.STRING) { return "" } Color: function(text) { if (typeof text != lang.STRING) { return "" }
if (text.indexOf("http://") == 0 || text.indexOf("https://") == 0 || text.indexOf("ftp://") == 0) { 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 var item = can.base.isArray(list)? can.page.Append(can, parent, list).first: list
return before && parent.insertBefore(item, before), item return before && parent.insertBefore(item, before), item
}, },
height: function() { return window.innerHeight },
width: function() { return window.innerWidth },
}) })

View File

@ -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.print fieldset.draw div.output { background-color:lightgray; }
body.mobile { overflow:auto; } body.mobile { overflow:auto; }
// body.mobile.black { background-color:black; }
body.mobile.simple { overflow:hidden; } body.mobile.simple { overflow:hidden; }
body.mobile legend { font-size:1.6rem; height:38px; } body.mobile legend { font-size:1.6rem; height:38px; }
body.mobile select { font-size:1.4rem; height:38px; border-radius:0; margin-right:10; } body.mobile select { font-size:1.4rem; height:38px; border-radius:0; margin-right:10; }

View File

@ -1,143 +1,79 @@
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) { Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onmotion.clear(can)
var river = can.Conf(chat.RIVER), storm = can.Conf(chat.STORM) var river = can.Conf(chat.RIVER), storm = can.Conf(chat.STORM); can.core.Next(msg.Table(), function(item, next) {
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)
item.inputs = can.base.Obj(item.inputs||item.list), can.onappend.plugin(can, item, function(sub, meta, skip) { can.onimport._plugin(can, river, storm, sub, meta), skip || next() })
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 _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) 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.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()}) 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) 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]) }, can._plugins = can.misc.concat(can, can._plugins, [sub]), can.onimport._tabs(can, sub, meta)
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
}, },
_share: function(can, share) { share && can.run({}, [web.SHARE, share], function(msg) { _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) 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.setHeader(chat.TOPIC, msg.SearchOrOption(chat.TOPIC)), can.user.title(msg.SearchOrOption(chat.TITLE))
can.user.title(msg.SearchOrOption(chat.TITLE)) can.Conf(chat.RIVER, web.SHARE, chat.STORM, share), can.onimport._init(can, msg)
can.Conf(chat.RIVER, web.SHARE, chat.STORM, share)
msg.Length() > 0 && can.onimport._init(can, msg)
}) }, }) },
_cmd: function(can, item, next) { can.onengine.signal(can, chat.ONACTION_CMD) _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) { 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()}) 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.runActionCommand(event, sub._index, cmds, cb)
can._plugins = can.misc.concat(can, can._plugins, [sub]) }, can._plugins = can.misc.concat(can, can._plugins, [sub]), can.user.title(meta.name), skip || next()
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 } _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.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.core.CallFunc([can.onaction, list[0]], [can, button])
}) })
can.page.Select(can, can._root.Header._output, "action", function(target) { 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.page.Append(can, target, ["tabs"]).first)
can.onmotion.hidden(can, can._header_tabs)
}) })
}, },
}) })
Volcanos(chat.ONENGINE, {help: "解析引擎", _engine: function(event, page, msg, can, cmds, cb) { Volcanos(chat.ONKEYMAP, {_init: function(can, target) { can.onkeymap._build(can)
var storm = can.core.Value(can._root, can.core.Keys(chat.RIVER, cmds[0], chat.STORM, cmds[1])) can.onengine.listen(can, chat.ONKEYDOWN, function(msg, model) { can._keylist = can.onkeymap._parse(msg._event, can, model, can._keylist||[], can._output) })
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)
})
}, },
_mode: { _mode: {
normal: { normal: {
j: 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, target) { target.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"]) }, b: function(event, can) { can.search(event, ["Header.onaction.black"]) },
w: function(event, can, target) { can.search(event, ["Header.onaction.white"]) }, 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.创建群组"]) }, " ": function(event, can) { can.onengine.signal(can, chat.ONSEARCH_FOCUS), can.onkeymap.prevent(event) },
s: function(event, can, target) { can.search(event, ["River.ondetail.添加应用"]) }, ":": function(event, can) { can.onengine.signal(can, chat.ONCOMMAND_FOCUS), can.onkeymap.prevent(event) },
t: function(event, can, target) { can.search(event, ["River.ondetail.添加工具"]) }, 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) }) },
" ": 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)
})
},
}, },
}, _engine: {}, }, _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_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) { if (can.user.isMobile || can.user.mod.isPod) { var gt = "", lt = ""
var gt = "", lt = ""; function toggle(view) { return can.onmotion.toggle(can, can._root.River._target) } 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) { 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)) 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)) }
target.ontouchstart = function(event) { can.onengine.signal(can, chat.ONACTION_TOUCH, can.request(event)) }
can.base.isFunc(cb) && cb()
}, },
_menus: [ _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"], [ice.HELP, "tutor", "manual", "service", "devops", "refer"],
], ],
_trans: { _trans: {
@ -147,11 +83,10 @@ Volcanos(chat.ONACTION, {help: "操作数据", _init: function(can, cb, target)
"tabview": "标签分屏", "tabview": "标签分屏",
"horizon": "左右分屏", "horizon": "左右分屏",
"vertical": "上下分屏", "vertical": "上下分屏",
"grid": "网格布局",
"flow": "流动布局",
"free": "自由布局", "free": "自由布局",
"flow": "流动布局",
"grid": "网格布局",
"page": "网页布局", "page": "网页布局",
"toimage": "生成图片",
"help": "帮助", "help": "帮助",
"tutor": "入门简介", "tutor": "入门简介",
@ -177,19 +112,16 @@ Volcanos(chat.ONACTION, {help: "操作数据", _init: function(can, cb, target)
} }
can.run({}, [river, storm], function(msg) { can.run({}, [river, storm], function(msg) {
if (msg.Length() == 0) { return can.onengine.signal(can, chat.ONACTION_NOTOOL, can.request({}, {river: river, storm: storm})) } 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.onaction.layout(can, can.misc.SearchOrConf(can, chat.LAYOUT)||Volcanos.meta.args.layout, true), can.onkeymap._init(can)
can.onimport._menu(can, msg), can.onkeymap._init(can) return can.onimport._menu(can, msg), can.onimport._init(can, msg)
return can.onimport._init(can, msg)
}) })
}, },
onaction_cmd: function(can, msg) { can.Mode("cmd") onaction_cmd: function(can, msg) { can.Mode("cmd")
can.Conf(html.MARGIN_Y, 2*html.ACTION_HEIGHT), can.Conf(html.MARGIN_X, 0) 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.ConfHeight(can.page.height()-can.Conf(html.MARGIN_Y)), can.ConfWidth(can.page.width())
can.page.style(can, can._target, html.HEIGHT, can._root._height, html.WIDTH, can._root._width) can.page.style(can, can._target, html.HEIGHT, can.page.height(), html.WIDTH, can.page.width())
can.page.ClassList.add(can, can._root._target, "simple") can.page.ClassList.add(can, can._target, "cmd"), can.page.ClassList.add(can, can._root._target, "simple")
can.page.ClassList.add(can, can._target, "cmd")
}, },
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 onkeydown: function(can, msg) { var event = msg._event
if (event.ctrlKey && event.key >= "1" && event.key <= "9") { if (event.ctrlKey && event.key >= "1" && event.key <= "9") {
can.onmotion.select(can, can._action, html.DIV_TABS, parseInt(event.key)-1) 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) 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)) }, 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 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.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.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._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 } can.user.isMobile || can.isCmdMode() || (can.onmotion.toggle(can, can._root.River._target, true), can.onmotion.toggle(can, can._root.Footer._target, true))
(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.onlayout._init(can); var cb = can.onlayout[button]; if (can.base.isFunc(cb) && cb(can, silent)) { return }
can.core.Next(can._plugins, function(sub, next) { can.onmotion.delay(can, function() { // (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))
sub.onaction._resize(sub, button == "" || button == ice.AUTO, can.ConfHeight(), can.ConfWidth()), next() 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) })
if (button == "") { can.page.style(can, sub._output, html.MAX_HEIGHT, "") }
}, 10) })
}, },
help: function(can, button) { can.user.open("/help/"+button+".shy") }, help: function(can, button) { can.user.open("/help/"+button+".shy") },
}) })
Volcanos(chat.ONLAYOUT, {help: "界面布局", Volcanos(chat.ONLAYOUT, {help: "界面布局",
tabs: function(can) { tabs: function(can) {
can.getActionSize(function(height, width) { 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.ConfHeight(height-2*html.ACTION_HEIGHT-4*html.PLUGIN_MARGIN-1), can.ConfWidth(width-4*html.PLUGIN_MARGIN)
})
if (can.page.Select(can, can._output, "fieldset.plugin.select").length > 0) { return } 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) 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) 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.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 }) can.core.List(can._plugins, function(sub) { sub._delay_refresh = true })
if (can.page.Select(can, can._output, "fieldset.plugin.select", function(target) { if (can.page.Select(can, can._output, "fieldset.plugin.select", function(target) { return target._plugin._header_tabs.click(), target }).length == 0) {
target._plugin._header_tabs.click() 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 target } return true
}).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) { horizon: function(can) {
can.onmotion.hidden(can, can._root.River._target), can.onmotion.hidden(can, can._root.Footer._target), can.onlayout._init(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.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) }) 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) { _grid: function(can, m, n) {
can.getActionSize(function(height, width) { can.getActionSize(function(height, width) {
var h = (height-(4*n+1)*html.PLUGIN_MARGIN)/n, w = (width-(4*m+1)*html.PLUGIN_MARGIN)/m 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.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) { grid: function(can, silent) {
can.user.input(event, can, [{name: "m", value: 2}, {name: "n", value: 2}], function(data) { 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
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
}, },
}) })
Volcanos(chat.ONEXPORT, {help: "导出数据", 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) { size: function(can, msg) {
msg.Option(html.TOP, can._output.offsetTop) msg.Option(html.TOP, can._output.offsetTop)
msg.Option(html.LEFT, can._output.offsetLeft) 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_X, can.Conf(html.MARGIN_X))
msg.Option(html.MARGIN_Y, can.Conf(html.MARGIN_Y)) 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) }, layout: function(can, msg) { return can.Conf(chat.LAYOUT) },
plugin: function(can, msg, word) { var fields = can.core.Split(msg.Option(ice.MSG_FIELDS)) 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) { can.page.Select(can, can._output, [[html.FIELDSET_PLUGIN, html.LEGEND]], function(item) {
if (item.innerHTML.indexOf(word[1]) == -1) { return } 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 list = can.page.Select(can, item.nextSibling, html.OPTION_ARGS, function(item) { return item.value||"" })
var meta = item.parentNode._meta; if (!meta) { return } var meta = item.parentNode._meta; if (!meta) { return }
@ -304,8 +217,39 @@ Volcanos(chat.ONEXPORT, {help: "导出数据",
data.context = meta.ctx, data.command = meta.cmd data.context = meta.ctx, data.command = meta.cmd
} else { } else {
return 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"]),
})

View File

@ -192,7 +192,7 @@ Volcanos(chat.ONACTION, {help: "交互数据",
white: function(event, can, button) { can.onimport.topic(can, button), can.onlayout._init(can) }, 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) }, 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)) }, 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) }, 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||[])) }, share: function(event, can, args) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(args||[])) },

View File

@ -28,7 +28,7 @@ Volcanos(chat.ONFIGURE, {key: {
}} }}
}), can.onappend._status(can, [mdb.TOTAL, mdb.INDEX]), can.Status(mdb.TOTAL, msg.Length()) }), 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.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) { _make: function(event, can, meta, cb, target, last) {

View File

@ -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 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() var width = can.ConfWidth()-320, height = can.ConfHeight()
if (can.isCmdMode()) { 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()) { } else if (can.isFullMode()) {
width = can.ConfWidth(), height = can.ConfHeight() width = can.ConfWidth(), height = can.ConfHeight()
can.onmotion.toggle(can, can.ui.project, false) can.onmotion.toggle(can, can.ui.project, false)

View File

@ -415,7 +415,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}, },
layout: function(can) { layout: function(can) {
if (can.isSimpleMode()) { return can.page.style(can, can.ui.content, html.WIDTH, can.ConfWidth()) } 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) 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) 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.profile_output, profile_width)
can.page.styleWidth(can, can.ui.display_output, width-project_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 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 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 var profile_height = height-html.ACTION_HEIGHT-display_height

View File

@ -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) can.onimport._content(can, msg, head, list, key, get, set)
}, },
layout: function(can) { layout: function(can) {
can.onmotion.toggle(can, can._action, !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 && window.innerHeight < window.innerWidth)) 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) 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 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) { if (can.ui.display.innerHTML && can.ui.display.style.display != html.NONE) {
can.page.style(can, can.ui.content, html.HEIGHT, can.ConfHeight()-height) can.page.style(can, can.ui.content, html.HEIGHT, can.ConfHeight()-height)

View File

@ -83,7 +83,7 @@ Volcanos(chat.ONACTION, {help: "组件菜单", list: [
can.page.Append(can, can._output, [{img: item, height: 200}]) 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) { can.user.input(event, can, [{type: "text", name: "file", value: "some"}], function(list) {
navigator.mediaDevices.getDisplayMedia({video: {height: height}}).then(function(stream) { navigator.mediaDevices.getDisplayMedia({video: {height: height}}).then(function(stream) {
var video = can.page.Append(can, can._output, [{type: html.VIDEO, height: height}]).first var video = can.page.Append(can, can._output, [{type: html.VIDEO, height: height}]).first

View File

@ -1,6 +1,6 @@
fieldset.word form.option input[name=path] { width:127px; } fieldset.word form.option input[name=path] { width:127px; }
fieldset.word>form.option>div.item>input[name=path] { width:320px; } 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; } 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; } 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 { 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.action { display:contents; }
fieldset.word.float>div.status { clear:none; display:block; } 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.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 { text-align:center; margin-top:31px; display:none; }
fieldset.word.float div.content div.page.show { display:block; } fieldset.word.float div.content div.page.show { display:block; }

View File

@ -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.page.style(can, item, can.base.Obj(data.style))
can.core.CallFunc([can.onimport, data.type], [can, data, item]) 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 navmenu: function(can, data, target) { var nav = can.sup._navmenu
nav = nav||can.page.Append(can, can._fields, [wiki.NAVMENU]).first 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) { 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) }})), can.onkeymap._build(can)
sub.page.style(sub, sub._target, html.BACKGROUND, can._root._target.style.background) 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.HEIGHT, can.page.height()-2*html.ACTION_HEIGHT)
sub.page.style(sub, sub._output, html.WIDTH, can._root._width) 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}]) sub.ui = sub.page.Append(sub, sub._output, [{view: chat.PROJECT}, {view: chat.CONTENT}])
can.core.List(sub.list = list, function(page, index) { 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 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) 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) }), can.onmotion.hidden(can, sub.ui.project), can.ondetail.show(sub, 0)

View File

@ -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) } 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 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 } 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}) can.onmotion.move(can, sub._target, {left: left, top: top})
}) })
}, document.body) }); return true }, 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) size: function(can, height, width, auto, mode) { // height += html.ACTION_HEIGHT-can.onexport.statusHeight(can)
if (auto) { 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 { } else {
can.page.style(can, can._output, html.HEIGHT, can.ConfHeight(height), html.WIDTH, can.ConfWidth(width), html.MAX_HEIGHT, "", html.MAX_WIDTH, "") 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()) 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 (mode) { sub.Mode(can.Mode(mode)), sub.onlayout[mode](sub) } else { can.onaction["刷新页面"]({}, can, "刷新页面", sub) }
if (can.user.isMobile) { can.user.isMobile && can.onmotion.toggle(can, can._action, can.ConfHeight() < can.ConfWidth()-100)
can.onmotion.toggle(can, can._action, can.ConfHeight() < can.ConfWidth()-100)
}
}, },
title: function(can, title) { title: function(can, title) {
can.isCmdMode() && can.user.title(title) can.isCmdMode() && can.user.title(title)
@ -131,8 +130,8 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [
can._status_bak = can._status.style.display == "" can._status_bak = can._status.style.display == ""
can.onmotion.hidden(can, can._action) can.onmotion.hidden(can, can._action)
can.onmotion.hidden(can, can._status) 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.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)+html.PLUGIN_MARGIN, top: window.innerHeight/2-html.PLUGIN_MARGIN}) }) 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() { }, function() {
can.onmotion.toggle(can, can._action, can._action_bak) can.onmotion.toggle(can, can._action, can._action_bak)
can.onmotion.toggle(can, can._status, can._status_bak) can.onmotion.toggle(can, can._status, can._status_bak)
@ -140,9 +139,9 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [
}) })
}, },
"切换全屏": function(event, can, button, sub) { "切换全屏": 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.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() {})
}, },
"共享工具": function(event, can) { var meta = can.Conf() "共享工具": 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, "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", "ish_sys_dev_run_command "+args, "ish_sys_dev_run_action", "ish_sys_dev_run_source",
] ]
can.user.toastScript(can, '<div class="story" data-type="spark", data-name="shell">'+
'<label>$ </label>'+'<span>'+list.join("</span><br/><label>$ </label><span>")+'</span>'+'</div>', conf.index+ice.SP+args)
can.user.copy(event, can, list[0]) can.user.copy(event, can, list[0])
}, },
"生成图片": function(event, can) { can.onmotion.toimage(event, can, can._name) }, "生成图片": function(event, can) { can.onmotion.toimage(event, can, can._name) },

View File

@ -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] 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]) } 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||{} parse: function(can, list, target, keys, data, type) { target = target||can._output, data = data||{}
if (!list) { return } else if (can.base.isArray(list)) { if (!list) { return } else if (can.base.isArray(list)) {

View File

@ -134,6 +134,6 @@ Volcanos(chat.ONEXPORT, {help: "导出数据", list: ["from", "commit", "total",
// can.isFullMode() || (height = can.base.Max(can.ConfHeight(), 600)) // can.isFullMode() || (height = can.base.Max(can.ConfHeight(), 600))
} }
if (height < 200) { height = 200 } if (height < 200) { height = 200 }
return parseInt(height||can._root._height/2) return parseInt(height||can.page.height()/2)
}, },
}) })

View File

@ -435,6 +435,7 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", pack:
isFloatMode: function(value) { return can.Mode() == "float" }, isFloatMode: function(value) { return can.Mode() == "float" },
isFullMode: function(value) { return can.Mode() == "full" }, isFullMode: function(value) { return can.Mode() == "full" },
isCmdMode: function(value) { return can.Mode() == "cmd" }, isCmdMode: function(value) { return can.Mode() == "cmd" },
isAutoMode: function(value) { return can.Mode() == "" },
Mode: function(value) { return can.Conf(ice.MODE, value) }, 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) }) }, 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) }, ConfHeight: function(value) { return can.Conf(html.HEIGHT, value) },