mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 16:58:06 +08:00
opt action.js
This commit is contained in:
parent
a520cd25f8
commit
81928d6aaf
28
frame.js
28
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()
|
||||
|
@ -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 },
|
||||
})
|
||||
|
@ -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; }
|
||||
|
256
panel/action.js
256
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"]),
|
||||
})
|
||||
|
@ -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||[])) },
|
||||
|
@ -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) {
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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; }
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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, '<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])
|
||||
},
|
||||
"生成图片": function(event, can) { can.onmotion.toimage(event, can, can._name) },
|
||||
|
@ -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)) {
|
||||
|
@ -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)
|
||||
},
|
||||
})
|
||||
|
1
proto.js
1
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) },
|
||||
|
Loading…
x
Reference in New Issue
Block a user