mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 16:58:06 +08:00
opt xterm.js
This commit is contained in:
parent
24403b7292
commit
b02f8be174
21
frame.js
21
frame.js
@ -146,6 +146,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
msg.RunAction(event, can.core.Value(sub, chat._OUTPUTS_CURRENT), [ctx.ACTION, button]) || msg.RunAction(event, sub, [ctx.ACTION, button]) || sub.runAction(event, button)
|
||||
}) })
|
||||
}), can.base.isFunc(cb) && cb(sub)
|
||||
sub.isCmdMode() && meta.index != web.CODE_VIMER && can.page.insertBefore(can, can.user.header(can), sub._output, sub._fields)
|
||||
}); return sub
|
||||
},
|
||||
_option: function(can, meta, option, skip) { var index = -1, args = can.base.Obj(meta.args||meta.arg, []), opts = can.base.Obj(meta.opts, {})
|
||||
@ -155,11 +156,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
list: {name: web.REFRESH, cb: function(event) { can.Update(event) }},
|
||||
back: {name: "goback", cb: function(event) { can.onimport._back(can) }},
|
||||
refresh: {name: web.REFRESH, cb: function(event) { can.Update(event) }},
|
||||
next: {name: mdb.NEXT},
|
||||
prev: {name: mdb.PREV},
|
||||
// create: {name: mdb.CREATE},
|
||||
// insert: {name: mdb.CREATE},
|
||||
play: {name: web.PLAY},
|
||||
next: {name: mdb.NEXT}, prev: {name: mdb.PREV}, play: {name: web.PLAY},
|
||||
// create: {name: mdb.CREATE}, insert: {name: mdb.CREATE},
|
||||
"": {name: mdb.DELETE, cb: function(event) { can.onaction.close(event, can) }},
|
||||
}[item.name||""]; if (!icon) { return } item.style = "icons"
|
||||
can.page.Append(can, option, [{view: [[html.ITEM, html.ICON, icon.name, item.name], html.DIV, can.page.unicode[icon.name]], title: item.name, onclick: icon.cb||function(event) {
|
||||
@ -167,6 +165,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
msg.RunAction(event, can.core.Value(can, chat._OUTPUTS_CURRENT), cmds) || msg.RunAction(event, can, cmds) || can.Update(event, cmds)
|
||||
}}])
|
||||
})
|
||||
can.core.List(args.slice(can.core.List(meta.inputs, function(item) { if (item.type == mdb.TEXT) { return item } }).length), function(item, index) { meta.inputs.push({type: mdb.TEXT, name: "args"+index, value: item}) })
|
||||
|
||||
function add(item, next) { item = can.base.isString(item)? {type: html.TEXT, name: item}: item, item.type != html.BUTTON && index++
|
||||
return Volcanos(item.name, {_root: can._root, _follow: can.core.Keys(can._follow, item.name),
|
||||
_target: can.onappend.input(can, item, args[index]||opts[item.name], option||can._option), _option: option||can._option, _action: can._action, _output: can._output, _status: can._status,
|
||||
@ -179,9 +179,9 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
can.core.ItemCB(sub.onaction, function(key, cb) { sub._target[key] = function(event) { can.misc.Event(event, can, function(msg) { cb(event, sub, sub._target) })} })
|
||||
can.core.ItemCB(item, function(key, cb) { sub._target[key] = function(event) { can.misc.Event(event, can, function(msg) { cb(event, sub, sub._target) })} })
|
||||
item.action && can.onappend.figure(sub, item, sub._target, function(_sub, value) { sub._target.value = value, can.Update() })
|
||||
skip? next(): can.core.CallFunc([sub.onaction, chat._INIT], {can: sub, meta: item, cb: next, target: sub._target})
|
||||
if (skip) { return } item.type == html.BUTTON && item.action == ice.AUTO && can.base.isUndefined(can._delay_init) && (auto = sub._target), next()
|
||||
})
|
||||
} can.core.Next(can.core.Value(can, [chat.ONIMPORT, mdb.LIST])||meta.inputs, add)
|
||||
}; var auto; can.core.Next(can.core.Value(can, [chat.ONIMPORT, mdb.LIST])||meta.inputs, add, function() { auto && auto.click() })
|
||||
},
|
||||
_action: function(can, list, action, meta) { meta = meta||can.onaction||{}, action = action||can._action, can.onmotion.clear(can, action)
|
||||
function run(event, button) { can.misc.Event(event, can, function(msg) { var _can = can._fields? can.sup: can
|
||||
@ -232,6 +232,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
|
||||
action === false || can.onmotion.clear(can, can._action), sub.onappend._action(sub, can.Conf(ice.MSG_ACTION)||msg.Option(ice.MSG_ACTION), action||can._action)
|
||||
action === false || sub.onappend._status(sub, sub.onexport&&sub.onexport.list||msg.Option(ice.MSG_STATUS)), can.user.isMobile || sub.onappend.tools(sub, msg)
|
||||
can.isCmdMode() && can.onappend.style(can, can.misc.Search(can, ctx.STYLE), can._target)
|
||||
can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, "")
|
||||
if (can.isCmdMode()) { can.onimport.size(can, can.page.height(), can.page.width(), true) }
|
||||
can.core.List([chat.FLOAT, chat.FULL, chat.CMD], function(mode) { can.page.ClassList.has(can, can._target, mode) && sub.onlayout[mode](sub) })
|
||||
can.onmotion.story.auto(can, can._output), can.onexport.output(can, msg), can.base.isFunc(cb) && cb(msg)
|
||||
@ -657,11 +658,13 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) {
|
||||
Volcanos(chat.ONKEYMAP, {_init: function(can, target) { target = target||document.body
|
||||
can.onkeymap._build(can), target.onkeydown = function(event) { can.misc.Event(event, can, function(msg) {
|
||||
if (can.user.isWindows && event.ctrlKey) { can.onkeymap.prevent(event) }
|
||||
if (can.page.tagis(event.target, html.SELECT, html.INPUT, html.TEXTAREA)) { return }
|
||||
if (can.page.tagis(event.target, html.SELECT, html.INPUT)) { return }
|
||||
// if (can.page.tagis(event.target, html.SELECT, html.INPUT, html.TEXTAREA)) { return }
|
||||
can.onengine.signal(can, chat.ONKEYDOWN, can.request(event, {"model": can.user.isWebview && event.metaKey? "webview": "normal"}))
|
||||
}) }, target.onkeyup = function(event) { can.misc.Event(event, can, function(msg) {
|
||||
if (can.user.isWindows && event.ctrlKey) { can.onkeymap.prevent(event) }
|
||||
if (can.page.tagis(event.target, html.SELECT, html.INPUT, html.TEXTAREA)) { return }
|
||||
if (can.page.tagis(event.target, html.SELECT, html.INPUT)) { return }
|
||||
// if (can.page.tagis(event.target, html.SELECT, html.INPUT, html.TEXTAREA)) { return }
|
||||
can.onengine.signal(can, chat.ONKEYUP, can.request(event, {"model": "normal"}))
|
||||
}) }
|
||||
},
|
||||
|
18
index.css
18
index.css
@ -41,7 +41,7 @@ table.content thead { position:sticky; top:2px; }
|
||||
table.content th { background-color:steelblue; padding:2px 5px; }
|
||||
table.content td { padding:2px 5px; }
|
||||
table.content.action th:last-child { position:sticky; right:2px; }
|
||||
table.content.action td:last-child { background-color:steelblue; max-width:150px; position:sticky; right:2px; }
|
||||
table.content.action td:last-child { background-color:steelblue; max-width:200px; position:sticky; right:2px; }
|
||||
table.content.full { width:100%; }
|
||||
div.code { background-color:#5066b945; font-size:14px; }
|
||||
div.story[data-type=spark] { background-color:#2169a9a6; color:white; padding:5px 10px; border-left:blue solid 5px; }
|
||||
@ -90,6 +90,7 @@ fieldset.input.date div.output td span.lunar.fest { color:red; }
|
||||
fieldset.input.date div.status { text-align:center; }
|
||||
/* float */
|
||||
body div.float { background-color:#061c3ceb; padding:5px; overflow:auto; }
|
||||
// body div.float { background-color:#061c3ceb; padding:5px; overflow:auto; top:100px; }
|
||||
body>div.toast div.title { color:blue; float:left; }
|
||||
body>div.toast div.duration { color:gray; float:right; }
|
||||
body>div.toast div.content { color:blue; text-align:center; }
|
||||
@ -123,7 +124,7 @@ legend>span.delete { font-size:1rem; margin-left:5px; margin-right:-15px; visibi
|
||||
select, input { font-size:1rem; height:32px; } textarea { tab-size:2; height:93px; } input::placeholder { font-style:italic; }
|
||||
table.content, div.item, div.code, div.story[data-type=spark] { white-space:pre; text-align:left; }
|
||||
table.content, div.item, div.code, div.story[data-type=spark] { font-family:monospace; }
|
||||
fieldset>div.action>div.tabs { padding:5px; height:32px; }
|
||||
fieldset>div.action>div.tabs { font-style:italic; line-height:22px; padding:5px; height:32px; }
|
||||
fieldset>div.status>div.item { padding:5px; height:31px; float:left; }
|
||||
fieldset>div.status>div.item>label { font-size:0.6rem; }
|
||||
/* display */
|
||||
@ -142,9 +143,10 @@ fieldset.plug div.output table.content { width:100%; }
|
||||
// fieldset.plugin>div.output>fieldset.story { position:sticky; left:0; }
|
||||
div.output { position:relative; }
|
||||
div.tabs { position:relative; }
|
||||
div.tabs span.icon { margin-left:5px; visibility:hidden; }
|
||||
div.tabs span.icon { margin-left:10px; visibility:hidden; }
|
||||
div.tabs span.icon:hover { background-color:aliceblue; color:black; }
|
||||
div.tabs>div:hover span.icon { visibility:visible; }
|
||||
div.action>div.tabs:hover span.icon { visibility:visible; }
|
||||
div.tabs>div.select span.icon { visibility:visible; }
|
||||
div.code { position:sticky; left:0; }
|
||||
div.plug { font-style:italic; }
|
||||
@ -282,6 +284,10 @@ body.mobile fieldset.Footer input[name=cmd] { height:3rem; }
|
||||
body.mobile fieldset.input.date div.output td { padding:8px 20px; }
|
||||
body.mobile fieldset.word.float>div.output>div.project { top:38px; }
|
||||
/* misc */
|
||||
fieldset.cmd>div.item.time { padding:5px 10px; line-height:22px; float:right; }
|
||||
fieldset.cmd>div.item.avatar { padding:0; float:right; height:32px; }
|
||||
fieldset.cmd>div.item.avatar>img { height:32px; }
|
||||
fieldset.cmd>div.item.usernick { padding:5px 10px; line-height:22px; float:right; }
|
||||
fieldset.panel.Action.cmd>div.toggle.project { display:none; }
|
||||
fieldset.panel.Search div.story[data-type=spark] { margin:0; }
|
||||
fieldset.panel.Search a { color:yellow; }
|
||||
@ -296,10 +302,10 @@ fieldset.plugin.inner.cmd>div.action { display:none; }
|
||||
fieldset.plugin.inner.cmd>form.option { display:none; }
|
||||
fieldset.plugin.inner.cmd fieldset.xterm>form.option>div.item.text>input { width:320px; }
|
||||
fieldset.plan div.output table.content { height:100%; width:100%; }
|
||||
fieldset.xterm div.toggle { display:none; }
|
||||
fieldset.xterm div.output.select { border:blue solid 1px; }
|
||||
fieldset.xterm.output>div.output { overflow:hidden; }
|
||||
fieldset.xterm div.output { border-left:gray solid 1px; border-top:gray solid 1px; }
|
||||
fieldset.xterm div.output.select { border:blue solid 1px; }
|
||||
fieldset.xterm div.action>div.tabs.select { color:blue; }
|
||||
fieldset.xterm.output>div.output { overflow:hidden; }
|
||||
div.layout.flex>div.output { float:left; clear:none; }
|
||||
fieldset>div.layout { clear:both; }
|
||||
fieldset.draw td.content { position:relative; }
|
||||
|
@ -175,7 +175,9 @@ Volcanos("misc", {
|
||||
},
|
||||
Info: function() { var args = this._args(log.INFO, arguments); console.info.apply(console, args), this._signal(args) },
|
||||
Warn: function() { var args = this._args(log.WARN, arguments); console.warn.apply(console, args), this._signal(args); debugger },
|
||||
Error: function() { var args = this._args(log.ERROR, arguments); args.push(ice.NL, this._stacks().slice(1).join(ice.NL)), console.error.apply(console, args), this._signal(args); debugger },
|
||||
Error: function() {
|
||||
var args = this._args(log.ERROR, arguments); args.push(ice.NL, this._stacks().slice(1).join(ice.NL)), console.error.apply(console, args), this._signal(args); debugger
|
||||
},
|
||||
Debug: function() { var args = this._args(log.DEBUG, arguments); args.push(ice.NL, this._stacks().slice(1, 4).join(ice.NL)), console.debug.apply(console, args), this._signal(args) },
|
||||
Trace: function() { var output = false
|
||||
for (var i in arguments) { var arg = arguments[i]; if (arg.Conf && arg.Conf("log.trace") == ice.TRUE || arg.Option && arg.Option("log.trace") == ice.TRUE) { output = true } } if (!output) { return }
|
||||
@ -193,10 +195,11 @@ Volcanos("misc", {
|
||||
for (var i = -depth+1; i < list.length; i++) { var pos = split(i); if (pos.path != current.path) { return pos } }
|
||||
} return split(depth)||{}
|
||||
},
|
||||
_stacks: function() { var list = ((new Error()).stack||"").split(ice.NL).slice(2)
|
||||
_stacks: function(n, s) { var list = ((s||(new Error())).stack||"").split(ice.NL).slice(typeof n == undefined? 2: n)
|
||||
for (var i = 0; i < list.length; i++) { var ls = list[i].trim().split(ice.SP)
|
||||
list[i] = ls.pop().trim(); if (list[i][0] == "(") { list[i] = list[i].slice(1, -1) }
|
||||
list[i] = ice.TB+list[i]; if (ls.length > 1) { list[i] += ice.TB+ls.pop() }
|
||||
list[i] = list[i].replace(/\?[^:]+/, "").replace(location.origin, "")
|
||||
} return list
|
||||
}, _stack: function() { return ((new Error()).stack||"").split(ice.NL).slice(2) },
|
||||
_time: function() { var now = new Date()
|
||||
|
@ -225,9 +225,10 @@ Volcanos("page", {
|
||||
while (list.node.childNodes.length > 0) { var item = list.node.childNodes[0]; item.parentNode.removeChild(item), output.appendChild(item) }
|
||||
return delete(cache[name]), list.data
|
||||
},
|
||||
insertBefore: function(can, list, before, parent) { parent = parent||before.parentNode
|
||||
var target = can.base.isArray(list)? can.page.Append(can, parent, list)._target: list
|
||||
return before && parent.insertBefore(target, before), target
|
||||
insertBefore: function(can, target, before, parent) { parent = parent||before.parentNode
|
||||
if (can.base.isArray(target)) {
|
||||
return can.core.List(target, function(item) { var target = can.page.Append(can, parent, [item])._target; return parent.insertBefore(target, before), target })[0]
|
||||
} return before && parent.insertBefore(target, before), target
|
||||
},
|
||||
styleHeight: function(can, target, value) { return can.page.style(can, target, html.HEIGHT, value), target.offsetHeight },
|
||||
styleWidth: function(can, target, value) { return can.page.style(can, target, html.WIDTH, value), target.offsetWidth },
|
||||
|
25
lib/user.js
25
lib/user.js
@ -65,7 +65,7 @@ Volcanos("user", {
|
||||
return fmt == "%W"? list: can.base.Time(time, (fmt||"%y-%m-%d %H:%M:%S").replace("%w", list[now.getDay()]))
|
||||
},
|
||||
toastConfirm: function(can, content, title, action) {
|
||||
if (!action.list || action.list.length == 0) { action = shy({confirm: action}, ["confirm", "cancel"], function() {}) }
|
||||
if (!action.list || action.list.length == 0) { action = shy({confirm: action}, ["confirm", web.CANCEL], function() {}) }
|
||||
var carte = can.user.toast(can, {content: content, title: title, action: action||[cli.CLOSE], duration: -1})
|
||||
can.page.style(can, carte._target, html.TOP, 200, html.BOTTOM, ""); return carte
|
||||
},
|
||||
@ -153,7 +153,7 @@ Volcanos("user", {
|
||||
})}]}, html.ACTION,
|
||||
]}])
|
||||
var action = can.onappend._action(can, button||[html.SUBMIT, html.CANCEL], ui.action, {
|
||||
_trans: {submit: msg.Option("submit")},
|
||||
_trans: {submit: msg.Option(web.SUBMIT)},
|
||||
focus: function() { can.onmotion.focus(can, can.page.Select(can, ui._target, html.INPUT_ARGS)[0]) },
|
||||
cancel: function() { can.page.Remove(can, ui._target) },
|
||||
submit: function(event, can, button) { var args = [], data = {}, err = false
|
||||
@ -196,7 +196,7 @@ Volcanos("user", {
|
||||
},
|
||||
toimage: function(can, name, target, silent) { var toast = can.user.toastProcess(can, "生成中...")
|
||||
can.require(["https://cdn.jsdelivr.net/npm/html2canvas@1.0.0-rc.5/dist/html2canvas.min.js"], function() { toast.close()
|
||||
html2canvas(target||can._target).then(function (canvas) { var url = canvas.toDataURL("image/png")
|
||||
html2canvas(target||can._target).then(function (canvas) { var url = canvas.toDataURL(web.IMAGE_PNG)
|
||||
silent? (can.user.download(can, url, name, nfs.PNG), can.user.toastSuccess(can)): can.user.toastImage(can, name, url)
|
||||
})
|
||||
})
|
||||
@ -217,8 +217,7 @@ Volcanos("user", {
|
||||
]} }
|
||||
var ui = can.onappend.tabview(can, {
|
||||
"扫码授权": function(target) { can.misc.WSS(can, {type: aaa.LOGIN, name: "", "sess.theme": can.getHeaderTheme()}, function(cmd, arg) {
|
||||
var _cmd = " space login "+arg[0]
|
||||
if (cmd == cli.PWD) { return can.page.Modify(can, target, arg[2]), can.page.Append(can, target, [
|
||||
if (cmd == cli.PWD) { var _cmd = " space login "+arg[0]; return can.page.Modify(can, target, arg[2]), can.page.Append(can, target, [
|
||||
{text: "<br/>请授权: "+_cmd, title: "点击复制,并后台执行此命令,即可登录", style: {cursor: "copy"}, onclick: function() { can.user.copy(event, can, _cmd) }},
|
||||
]), can.onmotion.delay(can, function() { layout() }, 10) }
|
||||
if (cmd == ice.MSG_SESSID) { return can.misc.CookieSessid(can, arg[0]), can.page.Remove(can, ui._target), can.base.isFunc(cb) && cb() }
|
||||
@ -234,7 +233,21 @@ Volcanos("user", {
|
||||
}, can.base.Obj(method, can.user.isMobile? ["密码登录"]: ["扫码授权"]), can.page.Append(can, document.body, [{view: "input login float"}])._target)
|
||||
can.onmotion.delay(can, function() { layout() })
|
||||
},
|
||||
logout: function(can) { can.user.toastConfirm(can, "logout", "", function() { can.runAction({}, aaa.LOGOUT, [], function(msg) {
|
||||
logout: function(can) { can.user.toastConfirm(can, aaa.LOGOUT, "", function() { can.runAction({}, aaa.LOGOUT, [], function(msg) {
|
||||
can.misc.Search(can, chat.SHARE)? can.misc.Search(can, chat.SHARE, ""): can.user.reload(true)
|
||||
}) }) },
|
||||
header: function(can) { var header = can._root.Header
|
||||
var meta = {
|
||||
time: {view: [[html.ITEM, mdb.TIME]], _init: function(target) {
|
||||
can.core.Timer({interval: 100}, function() { can.page.Modify(can, target, can.user.time(can, null, "%H:%M:%S %w")) })
|
||||
can.onappend.figure(can, {action: "date", _hold: true}, target, function(sub, value) {})
|
||||
}},
|
||||
avatar: {view: [[html.ITEM, aaa.AVATAR]], list: [{img: can.user.info.avatar}], onclick: function(event) {
|
||||
header && header.onaction.avatar(event, header)
|
||||
}},
|
||||
usernick: {view: [[html.ITEM, aaa.USERNICK], "", can.user.info.usernick], onclick: function(event) {
|
||||
header && header.onaction.usernick(event, header)
|
||||
}},
|
||||
}; return can.core.List(can.base.getValid(can.core.List(arguments).slice(1), [mdb.TIME, aaa.AVATAR, aaa.USERNICK]), function(item) { return meta[item] })
|
||||
}
|
||||
})
|
||||
|
@ -59,7 +59,9 @@ Volcanos(chat.ONACTION, {_init: function(can, target) {
|
||||
if (arg[0] == mdb.PLUGIN) { can.onexport.plugin(can, msg, arg, fields) }
|
||||
if (arg[0] == ctx.COMMAND) { can.onexport.command(can, msg, arg, fields) }
|
||||
},
|
||||
onkeydown: function(can, msg, model) { if (can.isCmdMode() && !msg._event.metaKey) { return }
|
||||
onkeydown: function(can, msg, model) { if (can.isCmdMode() && !msg._event.metaKey) {
|
||||
var sub = can.core.Value(can._plugins[0], chat._OUTPUTS_CURRENT); sub && can.core.CallFunc([sub, "onaction.onkeydown"], {event: msg._event, can: sub}); return
|
||||
}
|
||||
if (can.onkeymap.selectCtrlN(msg._event, can, can._action, html.DIV_ITEM)) { return }
|
||||
can._keylist = can.onkeymap._parse(msg._event, can, model, can._keylist||[], can._output)
|
||||
},
|
||||
|
@ -8,7 +8,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onmotion.clear(can, can
|
||||
_size: function(can) { can.getActionSize(function(left, top, width, height) {
|
||||
can.page.style(can, can._target, {left: left||0, top: top||0, width: width}), can.page.style(can, can._output, html.MAX_HEIGHT, height -= 2*html.PLUGIN_MARGIN+html.ACTION_HEIGHT+can.onexport.statusHeight(can))
|
||||
can.core.List([can.ui.content, can.ui.display], function(target) { can.page.style(can, target, html.MAX_WIDTH, can.ConfWidth(width-2*html.PLUGIN_MARGIN)) })
|
||||
can.ConfHeight(can.base.Min(height-can.ui.content.offsetHeight-can.ui.display.offsetHeight+can.onexport.statusHeight(can)-1, 320))
|
||||
can.ConfHeight(can.base.Min(height-can.ui.content.offsetHeight-can.ui.display.offsetHeight+can.onexport.statusHeight(can)-1, height/2))
|
||||
}) },
|
||||
_input: function(can, msg, arg, fields) { if (can.base.contains(arg[1], ";")) { arg = can.core.Split(arg[1], "\t ;", "\t ;") }
|
||||
can.run(can.request({}, {fields: fields.join(ice.FS)}, msg), arg, function(res) { can.db.type = arg[0]
|
||||
|
@ -37,10 +37,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.cl
|
||||
can.onimport._tabview(can, args[args.length-3]||can.Option(nfs.PATH), args[args.length-2]||can.Option(nfs.FILE), args[args.length-1])
|
||||
} }), can.base.isFunc(cb) && cb(msg)
|
||||
},
|
||||
_keydown: function(can) { can.onkeymap._build(can), can._root.onengine.listen(can, chat.ONKEYDOWN, function(event) {
|
||||
if (can.onkeymap.selectCtrlN(event, can, can.ui.tabs, html.DIV_TABS)) { return }
|
||||
can.db._key_list = can.onkeymap._parse(event, can, mdb.PLUGIN, can.db._key_list, can.ui.content)
|
||||
}) },
|
||||
_keydown: function(can) { can.onkeymap._build(can) },
|
||||
_tabs: function(can) { if (!can.isCmdMode()) { return can.ui.tabs = can._action }
|
||||
can.user.isMobile || can.core.List([
|
||||
{name: can.page.unicode.menu, onclick: function() {
|
||||
@ -60,12 +57,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.cl
|
||||
})
|
||||
}},
|
||||
], function(item) { can.page.Append(can, can.ui.tabs, [can.base.Copy(item, {view: [[html.ICON, web.WEBSITE], html.DIV, item.name]})]) })
|
||||
can.user.isMobile || can.page.Append(can, can.ui.tabs, [{view: mdb.TIME, _init: function(target) {
|
||||
can.core.Timer({interval: 100}, function() { can.page.Modify(can, target, can.user.time(can, null, "%H:%M:%S %w")) })
|
||||
can.onappend.figure(can, {action: "date", _hold: true}, target, function(sub, value) {})
|
||||
}}])
|
||||
can.page.Append(can, can.ui.tabs, [{view: aaa.AVATAR, list: [{img: can.user.info.avatar}], onclick: function(event) { can._root.Header.onaction.avatar(event, can._root.Header) }}])
|
||||
can.page.Append(can, can.ui.tabs, [{view: [aaa.USERNICK, "", can.user.info.usernick], onclick: function(event) { can._root.Header.onaction.usernick(event, can._root.Header) }}])
|
||||
can.page.Append(can, can.ui.tabs, can.user.header(can))
|
||||
},
|
||||
__tabPath: function(can, skip) { can.onmotion.clear(can, can.ui.path)
|
||||
can.onimport._tabPath(can, ice.PS, nfs.PATH, can.base.Path(can.Option(nfs.PATH), can.Option(nfs.FILE)), function(ls) {
|
||||
@ -531,6 +523,10 @@ Volcanos(chat.ONACTION, {list: ["调试", "首页", "官网", "源码", "百度"
|
||||
}, close: function() { can.page.Remove(can, ui._target) },
|
||||
}); var from, to
|
||||
},
|
||||
onkeydown: function(event, can) {
|
||||
if (can.onkeymap.selectCtrlN(event, can, can.ui.tabs, html.DIV_TABS)) { return }
|
||||
can.db._key_list = can.onkeymap._parse(event, can, mdb.PLUGIN, can.db._key_list, can.ui.content)
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONEXPORT, {list: [mdb.COUNT, mdb.TYPE, nfs.FILE, nfs.LINE, ice.BACK],
|
||||
size: function(can, size, full) { if (size > 1) { return size } if (size > 0) { return size*full } },
|
||||
@ -556,39 +552,43 @@ Volcanos(chat.ONEXPORT, {list: [mdb.COUNT, mdb.TYPE, nfs.FILE, nfs.LINE, ice.BAC
|
||||
} } }
|
||||
var package = "", block = "", current = can.Option(nfs.LINE), percent = " = "+parseInt(can.Option(nfs.LINE)*100/(can.db.max||1))+"%"
|
||||
can.page.Select(can, can.ui.content, "tr.line>td.text", function(item, index) { var text = item.innerText, _indent = indent(text)
|
||||
function push(item) { list.push(item); if (index < can.Option(nfs.LINE)) { current = list[list.length-1], percent = " = "+parseInt((index+1)*100/(can.db.max||1))+"%" } }
|
||||
if (can.db.parse == nfs.JS) { var ls = can.core.Split(text, "\t (,", ice.DF)
|
||||
function push(item) { list.push(item+(item? ice.DF+(index+1): "")); if (index < can.Option(nfs.LINE)) { current = list[list.length-1], percent = " = "+parseInt((index+1)*100/(can.db.max||1))+"%" } }
|
||||
if (can.db.parse == nfs.CSS) {
|
||||
if (text.indexOf("/* ") == 0) {
|
||||
push(can.base.trimPrefix(can.base.trimSuffix(text, " */"), "/* "))
|
||||
}
|
||||
} else if (can.db.parse == nfs.JS) { var ls = can.core.Split(text, "\t (,", ice.DF)
|
||||
if (_indent == 0 && can.base.beginWith(text, "Volcanos")) {
|
||||
var _block = can.base.trimPrefix(ls[1], "chat.").toLowerCase()
|
||||
if (_block != block) { push("") } block = _block
|
||||
if (text.indexOf(chat._INIT) > -1) { push(block+ice.PT+chat._INIT+ice.DF+(index+1)) }
|
||||
if (text.indexOf(chat._INIT) > -1) { push(block+ice.PT+chat._INIT) }
|
||||
} else if (_indent == 0 && can.base.beginWith(text, "var ")) {
|
||||
block = ls[1]
|
||||
} else if (_indent == 4 && ls[1] == ice.DF) {
|
||||
ls[0] && push(block+ice.PT+ls[0]+ice.DF+(index+1))
|
||||
ls[0] && push(block+ice.PT+ls[0])
|
||||
}
|
||||
} else if (can.db.parse == nfs.SH) {
|
||||
if (can.base.endWith(text, "() {")) {
|
||||
var ls = can.core.Split(text, "\t (){")
|
||||
push(ls[0]+ice.DF+(index+1))
|
||||
push(ls[0])
|
||||
}
|
||||
} else if (can.db.parse == nfs.GO) { var ls = can.core.Split(text, "\t *", "({:})")
|
||||
if (_indent == 0) {
|
||||
switch (ls[0]) {
|
||||
case "package": package = ls[1]; break
|
||||
case "func": if (ls[1] == "(") { ls[1] = ls[2]+ice.PT+ls[5]
|
||||
if (ls[5].toLowerCase()[0] == ls[5][0]) { push("- "+ls[1]+ice.DF+(index+1)) } else { push("+ "+ls[1]+ice.DF+(index+1)) } break
|
||||
if (ls[5].toLowerCase()[0] == ls[5][0]) { push("- "+ls[1]) } else { push("+ "+ls[1]) } break
|
||||
}
|
||||
case "type":
|
||||
case "var":
|
||||
if (ls[1].toLowerCase()[0] == ls[1][0]) { push("- "+ls[1]+ice.DF+(index+1)) } else { push("+ "+package+ice.PT+ls[1]+ice.DF+(index+1)) } break
|
||||
if (ls[1].toLowerCase()[0] == ls[1][0]) { push("- "+ls[1]) } else { push("+ "+package+ice.PT+ls[1]) } break
|
||||
}
|
||||
} else if (_indent == 4) {
|
||||
if (text.indexOf("MergeCommands(") > -1) { block = "cmds" } else if (text == "})") { block = "" }
|
||||
} else if (_indent == 8) {
|
||||
if (block == "cmds" && ls[1] == ice.DF) { push("+ "+package+ice.PT+ls[0]+ice.DF+(index+1)), block = package+ice.PT+ls[0] }
|
||||
if (block == "cmds" && ls[1] == ice.DF) { push("+ "+package+ice.PT+ls[0]), block = package+ice.PT+ls[0] }
|
||||
} else if (_indent == 12) {
|
||||
if (block && ls[1] == ice.DF) { push("+ "+block+ice.SP+ls[0]+ice.DF+(index+1)) }
|
||||
if (block && ls[1] == ice.DF) { push("+ "+block+ice.SP+ls[0]) }
|
||||
}
|
||||
}
|
||||
}); return {list: list, current: current, percent: percent}
|
||||
|
@ -233,7 +233,6 @@ Volcanos(chat.ONKEYMAP, {
|
||||
g: shy("查找搜索", function(event, can) { can.onaction.find(event, can) }),
|
||||
},
|
||||
normal: {
|
||||
f: shy("打开文件", function(event, can) { can.onaction.open(event, can) }),
|
||||
s: shy("保存文件", function(event, can) { can.onaction.save(event, can, nfs.SAVE) }),
|
||||
c: shy("编译项目", function(event, can) { can.onaction.compile(event, can, code.COMPILE) }),
|
||||
|
||||
|
@ -1,14 +1,18 @@
|
||||
Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { can.page.requireModules(can, ["xterm/css/xterm.css", "xterm", "xterm-addon-fit", "xterm-addon-web-links"], function() {
|
||||
var item = msg.TableDetail(); item.hash = item.hash||can.Option(mdb.HASH), can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg), can.onappend._status(can)
|
||||
var item = msg.TableDetail(); item.hash = item.hash||can.Option(mdb.HASH), can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg), can.onappend._status(can), can.onkeymap._build(can)
|
||||
if (item.type == html.LAYOUT) { can.onimport._layout(can, item) } else { can.onimport._connect(can, item, can._output) } can.onimport.layout(can)
|
||||
can.sup.onexport.link = function() { return can.misc.MergePodCmd(can, {cmd: web.CODE_XTERM, hash: item.hash, style: html.OUTPUT}) }
|
||||
can.sup.onexport.link = function() { return can.misc.MergePodCmd(can, {pod: can.Conf(ice.POD), cmd: web.CODE_XTERM, hash: item.hash, style: html.OUTPUT}) }
|
||||
}) },
|
||||
_layout: function(can, item) {
|
||||
function connect(item, output, tabs) { can.run(can.request({}, item), [item.hash], function(msg) {
|
||||
can.core.Item(msg.TableDetail(), function(key, value) { item[key] = value })
|
||||
can.onappend._status(can), can.onimport._connect(can, item, output, tabs)
|
||||
}, true); return output }
|
||||
function show(list, target, root, tabs) { root = root||target, can.core.List(list, function(item) {
|
||||
if (item.type.indexOf(html.LAYOUT) == 0) {
|
||||
show(item.list, can.page.Append(can, target, [item.type])._target, root, tabs)._root = root
|
||||
} else {
|
||||
can.onimport._connect(can, item, can.page.Append(can, target, [html.OUTPUT])._target, tabs)._output._root = root
|
||||
connect(item, can.page.Append(can, target, [html.OUTPUT])._target, tabs)._root = root
|
||||
}
|
||||
}); return target }
|
||||
var main, output = can._output; can.core.List(can.base.Obj(item.text), function(item) {
|
||||
@ -16,77 +20,129 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { can.page.requireModules
|
||||
var target = show(item.list, can.page.insertBefore(can, [item.type], can._status), null, tabs); target._tabs = tabs, tabs._output = target
|
||||
if (item.type.indexOf(html.HIDE) == -1) { main = target }
|
||||
} else {
|
||||
main = main||can.onimport._connect(can, item, output||can.page.insertBefore(can, [html.OUTPUT], can._status))._output, output = null
|
||||
var target = connect(item, output||can.page.insertBefore(can, [html.OUTPUT], can._status)); output = null
|
||||
main = main||target
|
||||
}
|
||||
}), can.onaction.select(can, main)
|
||||
},
|
||||
_tabs: function(can, item, output) { if (output != output._root && output._root) { return output._tabs = output._root._tabs }
|
||||
var tabs = can.page.Append(can, can._action, [{view: [html.TABS, "", item.name||item.type||item.hash], onclick: function() {
|
||||
can.onaction.select(can, tabs._output)
|
||||
}}])._target; return tabs._output = output, output._tabs = tabs
|
||||
var tabs = can.onimport.tabs(can, [{name: item.name||item.type||item.hash}], function() {
|
||||
can.onmotion.delay(can, function() { var output = tabs._output; can.onaction.select(can, output._root||output) })
|
||||
}, function() { can.onaction.delete(can, tabs._output) }); return tabs._output = output, output._tabs = tabs
|
||||
},
|
||||
_theme: function(can, item) { return can.base.Obj(item.theme)||(can.getHeaderTheme() == html.LIGHT? {background: cli.WHITE, foreground: cli.BLACK, cursor: cli.BLUE}: {}) },
|
||||
_connect: function(can, item, output, tabs, text) { var term = new Terminal({tabStopWidth: 4, cursorBlink: true, theme: can.onimport._theme(can, item)})
|
||||
term._item = item, term._output = output, output._term = term, output._tabs || (tabs? (output._tabs = tabs): can.onimport._tabs(can, item, output))
|
||||
var fitAddon = new FitAddon.FitAddon(); term.loadAddon(fitAddon), term._fit = fitAddon, can.onmotion.delay(can, function() { fitAddon.fit() })
|
||||
term.onTitleChange(function(title) { can.onexport.title(can, title) }), can.onexport.title(can, item.name)
|
||||
term.onTitleChange(function(title) { can.onexport.title(can, term, title) }), can.onexport.title(can, term, item.name)
|
||||
term.onResize(function(size) { can.onimport._resize(can, term, size) })
|
||||
term.onData(function(data) { can.onimport._input(can, term, data) })
|
||||
term.onCursorMove(function() { can.onexport.term(can, term) })
|
||||
term.loadAddon(new WebLinksAddon.WebLinksAddon())
|
||||
term._item = item, term._output = output, output._term = term, output._tabs || (tabs? (output._tabs = tabs): can.onimport._tabs(can, item, output))
|
||||
term.open(output), term.focus(), text && term.write(text.replaceAll(ice.NL, "\r\n"))
|
||||
can.onmotion.clear(can, output), term.open(output), term.focus(), text && can.onmotion.delay(can, function() { term.write(text.replaceAll(ice.NL, "\r\n")) })
|
||||
can.onengine.listen(can, chat.ONTHEMECHANGE, function() { can = can.core.Value(can.sup, chat._OUTPUTS_CURRENT)
|
||||
term.selectAll(), can.onimport._connect(can, item, output, tabs, can.base.trimSuffix(term.getSelection(), ice.NL))
|
||||
}), can.page.style(can, output, html.BACKGROUND_COLOR, term._publicOptions.theme.background||cli.BLACK)
|
||||
output.onclick = function() { can.onmotion.select(can, can._fields, html.DIV_OUTPUT, can._output = output), can.onexport.term(can, term) }
|
||||
return can.db = can.db||{}, can.db[item.hash] = term
|
||||
output.onclick = function() { output._tabs._current = output
|
||||
can.onmotion.select(can, can._fields, html.DIV_OUTPUT, can._output = output), term.focus(), can.onexport.term(can, term)
|
||||
}; return can.db = can.db||{}, can.db[item.hash] = term
|
||||
},
|
||||
_resize: function(can, term, size) { can.runAction(can.request({}, size, term._item), web.RESIZE, [], function() { can.onexport.term(can, term) }) },
|
||||
_input: function(can, term, data) { can._output = term._output, can.runAction(can.request({}, term._item), web.INPUT, [btoa(data)], function() {}) },
|
||||
_input: function(can, term, data) {
|
||||
if (data == "\u0013") { can._delay = true
|
||||
can.onmotion.delay(can, function() { can._delay && can.runAction(can.request({}, term._item), web.INPUT, [btoa(data)], function() {}) })
|
||||
} else {
|
||||
if (can._delay) { can._delay = false; var msg = can.request({}, {_handle: ice.TRUE}, term._item)
|
||||
can._keylist = can.onkeymap._parse({key: data, _msg: msg}, can, mdb.NORMAL, can._keylist||[], term); return
|
||||
} can._output = term._output, can.runAction(can.request({}, term._item), web.INPUT, [btoa(data)], function() {})
|
||||
}
|
||||
},
|
||||
grow: function(can, msg) { var arg = msg.detail.slice(1), term = can.db[arg[0]]; arg[1] == "~~~end~~~"? can.onaction.delete(can, term._output): term.write(arg[1]) },
|
||||
layout: function(can) { function show(target, height, width) { var list = can.page.SelectChild(can, target, can.page.Keys(html.DIV_OUTPUT, html.DIV_LAYOUT))
|
||||
var h = height/list.length, w = width; if (can.page.ClassList.has(can, target, html.FLEX)) { h = height, w = width/list.length } if (target == can._fields) { h = height, w = width }
|
||||
can.core.List(list, function(target) { can.page.style(can, target, html.HEIGHT, h, html.WIDTH, w), can.page.ClassList.has(can, target, html.LAYOUT)? show(target, h, w): target._term && target._term._fit.fit() })
|
||||
} show(can._fields, can.ConfHeight(), can.ConfWidth()) },
|
||||
})
|
||||
Volcanos(chat.ONACTION, {list: ["+", "-", "/", "sess"],
|
||||
"+": function(event, can) { can.Update(event, [ctx.ACTION, mdb.CREATE], function(msg) { can.Update(event, [msg.Result()], function(msg) {
|
||||
Volcanos(chat.ONKEYMAP, {
|
||||
_mode: {
|
||||
normal: {
|
||||
u: function(event, can) { can.onaction.split(event, can, html.FLOW) },
|
||||
v: function(event, can) { can.onaction.split(event, can, html.FLEX) },
|
||||
j: function(event, can) { can.onaction.selectSibling(can, html.FLOW) },
|
||||
k: function(event, can) { can.onaction.selectSibling(can, html.FLOW, true) },
|
||||
h: function(event, can) { can.onaction.selectSibling(can, html.FLEX, true) },
|
||||
l: function(event, can) { can.onaction.selectSibling(can, html.FLEX) },
|
||||
c: function(event, can) { can.onaction.tabnew(event, can) },
|
||||
e: function(event, can) { can.user.input({target: can._output._tabs}, can, [mdb.NAME], function(list) { can.onexport.title(can, can._output._term, list[0]) }) },
|
||||
n: function(event, can) { can._output._tabs.nextSibling && can._output._tabs.nextSibling.click() },
|
||||
p: function(event, can) { can._output._tabs.previousSibling && can._output._tabs.previousSibling.click() },
|
||||
s: function(event, can) { can.onaction.sess(event, can) },
|
||||
t: function(event, can) { can.user.input({target: can._output._tabs}, can, [ctx.INDEX, ctx.ARGS], function(list, data) { can.onimport.tool(can, [data], function(sub) {
|
||||
sub.select(), sub.onexport.record = function(_, value) { can.onimport._input(can, can._output._term, value+ice.NL) }
|
||||
}, can._fields) }) },
|
||||
f: function(event, can) {
|
||||
var input = can.user.input({target: can._output._tabs}, can, [{type: mdb.TEXT, name: mdb.NAME, select: function(item) {
|
||||
input.submit(event, can, "submit")
|
||||
}, run: function(event, cmds, cb) { var msg = can.request(event)
|
||||
can.page.Select(can, can._action, [html.DIV_TABS, html.SPAN_NAME], function(target) { msg.Push(mdb.NAME, target.innerText) })
|
||||
cb(msg)
|
||||
}}], function(list) {
|
||||
|
||||
})
|
||||
},
|
||||
},
|
||||
}, _engine: {},
|
||||
})
|
||||
Volcanos(chat.ONACTION, {
|
||||
tabnew: function(event, can) { can.Update(event, [ctx.ACTION, mdb.CREATE], function(msg) { can.Update(event, [msg.Result()], function(msg) {
|
||||
can.onaction.select(can, can._output = can.page.insertBefore(can, [html.OUTPUT], can._status)), can.onimport._init(can, msg)
|
||||
}) }) },
|
||||
"-": function(event, can) { can.onaction.split(event, can, html.FLOW) },
|
||||
"/": function(event, can) { can.onaction.split(event, can, html.FLEX) },
|
||||
split: function(event, can, button) { can.Update(event, [ctx.ACTION, mdb.CREATE], function(msg) { can.Update(event, [msg.Result()], function(msg) {
|
||||
if (can.page.ClassList.has(can, can._output.parentNode, button)) { var layout = can._output.parentNode } else {
|
||||
var layout = can.page.insertBefore(can, [{view: [[html.LAYOUT, button]]}], can._output); layout.appendChild(can._output)
|
||||
}
|
||||
var root = can._output._root||layout, tabs = can._output._tabs; tabs._output = root, root._tabs = tabs
|
||||
} var root = can._output._root||layout, tabs = can._output._tabs; tabs._output = root, root._tabs = tabs
|
||||
can._output._root = root, can._output = can.page.insertBefore(can, [html.OUTPUT], can._output.nextSibling, layout)
|
||||
can._output._root = root, can._output._tabs = tabs, can.onimport._init(can, msg)
|
||||
can._output._root = root, can._output._tabs = tabs, can.onimport._init(can, msg), can.onmotion.delay(can, function() { can._output.click() })
|
||||
}) }) },
|
||||
delete: function(can, output) {
|
||||
if (output == can.sup._output) {
|
||||
can.onmotion.clear(can, output)
|
||||
} else {
|
||||
while (output && output.parentNode.children.length == 1) { output = output.parendNode }
|
||||
if (output == can.sup._output) { can.onmotion.clear(can, output) } else {
|
||||
while (output && output.parentNode.children.length == 1) { output = output.parentNode }
|
||||
var next = output.parentNode; can.onmotion.delay(can, function() { can.page.Select(can, next, html.DIV_OUTPUT, function(target) { target.click() }) })
|
||||
can.page.Remove(can, output)
|
||||
} can.onimport.layout(can)
|
||||
},
|
||||
select: function(can, output) { can.page.SelectChild(can, can._fields, can.page.Keys(html.DIV_OUTPUT, html.DIV_LAYOUT), function(target) { can.onmotion.hidden(can, target, target == output || target == output._root)
|
||||
can.onmotion.delay(can, function() { can.page.Select(can, target, can.page.Keys(html.DIV_OUTPUT, html.DIV_LAYOUT), function(target) { target._term && target._term._fit.fit() }) })
|
||||
can.onmotion.delay(can, function() {
|
||||
output._tabs._current? output._tabs._current.click(): (target.click(), can.page.SelectOne(can, target, html.DIV_OUTPUT, function(target) { target.click() }))
|
||||
can.page.Select(can, target, can.page.Keys(html.DIV_OUTPUT, html.DIV_LAYOUT), function(target) { target._term && target._term._fit.fit() })
|
||||
})
|
||||
}) },
|
||||
sess: function(can) { can.runAction({}, mdb.CREATE, [mdb.TYPE, html.LAYOUT, mdb.TEXT, can.base.Format(can.onexport.sess(can))], function() {}, true) },
|
||||
selectSibling: function(can, layout, prev) { var key = prev? "previousSibling": "nextSibling"
|
||||
var output = can._output; while ((!output[key] || !can.page.ClassList.has(can, output.parentNode, layout)) && output != can._fields) { output = output.parentNode }
|
||||
if (can.page.ClassList.has(can, output.parentNode, layout) && output[key]) {
|
||||
can.page.SelectOne(can, output[key], html.DIV_OUTPUT, function(target) { target.click() })||output[key].click()
|
||||
}
|
||||
},
|
||||
sess: function(event, can) { can.user.input(event, can, [mdb.NAME], function(list) {
|
||||
can.runAction({}, mdb.CREATE, [mdb.TYPE, html.LAYOUT, mdb.NAME, list[0], mdb.TEXT, can.base.Format(can.onexport.sess(can))], function(msg) {
|
||||
can.user.toastSuccess(can, can.user.trans(can, nfs.SAVE)+ice.SP+msg.Result())
|
||||
}, true)
|
||||
}) },
|
||||
onkeydown: function(event, can) {
|
||||
if (can.onkeymap.selectCtrlN(event, can, can._action, html.DIV_TABS)) { return }
|
||||
can._keylist = can.onkeymap._parse(event, can, mdb.NORMAL, can._keylist||[], can._output._term)
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONEXPORT, {list: [mdb.TIME, mdb.HASH, mdb.TYPE, mdb.NAME, "rows", "cols", "cursorY", "cursorX"],
|
||||
term: function(can, term) { item = term._item
|
||||
can.core.List(can.onexport.list, function(key) { can.Status(key, can.base.getValid(item[key], term[key], term.buffer.active[key], "")+"") })
|
||||
can.core.List([mdb.HASH, mdb.TYPE, mdb.NAME], function(key) { can.Status(key, item[key]||"") })
|
||||
can.core.List([mdb.TIME, mdb.HASH, mdb.TYPE, mdb.NAME], function(key) { can.Status(key, item[key]||"") })
|
||||
},
|
||||
sess: function(can) { return can.page.Select(can, can._action, html.DIV_TABS, function(target) { function show(target) {
|
||||
var name = can.page.SelectOne(can, target._tabs, html.SPAN_NAME).innerText
|
||||
if (can.page.ClassList.has(can, target, html.LAYOUT)) {
|
||||
return {type: target.className, name: target._tabs? target._tabs.innerText: "", list: can.page.SelectChild(can, target, can.page.Keys(html.DIV_OUTPUT, html.DIV_LAYOUT), function(target) { return show(target) })}
|
||||
} else {
|
||||
var item = target._term._item; return {type: item.type, name: target._tabs.innerText, text: item.text, hash: item.hash}
|
||||
}
|
||||
return {type: target.className, name: name, list: can.page.SelectChild(can, target, can.page.Keys(html.DIV_OUTPUT, html.DIV_LAYOUT), function(target) { return show(target) })}
|
||||
} else { var item = target._term._item; return {type: item.type, name: name, text: item.text, hash: item.hash} }
|
||||
} return show(target._output) }) },
|
||||
title: function(can, title) { can.page.Modify(can, can._output._tabs, title), can.Status(mdb.NAME, title), can.sup.onexport.title(can.sup, title) },
|
||||
title: function(can, term, title) { can.page.Modify(can, can.page.SelectOne(can, term._output._tabs, html.SPAN_NAME), title), can.Status(mdb.NAME, title), can.sup.onexport.title(can.sup, title) },
|
||||
})
|
||||
|
@ -12,14 +12,15 @@ Volcanos(chat.ONIMPORT, {
|
||||
_clear: function(can, msg) { can.onmotion.clear(can) },
|
||||
_inner: function(can, msg) { can.onappend.table(can, msg), can.onappend.board(can, msg), can.onmotion.story.auto(can) },
|
||||
_field: function(can, msg) {
|
||||
var opts = {}; can.page.SelectArgs(can, can._option, "", function(target) { var value = msg.Option(target.name); target.name && value && (opts[target.name] = value) })
|
||||
var height = can.ConfHeight(); can.page.Select(can, can._output, html.TABLE, function(target) { height -= target.offsetHeight })
|
||||
msg.Table(function(item) { can.onappend._plugin(can, item, {index: item.index, args: can.base.Obj(item.args||item.arg, []), height: can.base.Min(height, 200)}, function(sub, meta) {
|
||||
var opts = {pod: msg.Option(ice.POD)}; can.page.SelectArgs(can, can._option, "", function(target) { var value = msg.Option(target.name); target.name && value && (opts[target.name] = value) })
|
||||
var height = can.ConfHeight(); can.page.SelectChild(can, can._output, html.TABLE, function(target) { height -= target.offsetHeight })
|
||||
msg.Table(function(item) { can.onappend._plugin(can, item, {pod: msg.Option(ice.POD), index: item.index, args: can.base.Obj(item.args||item.arg, []), height: can.base.Min(height, 200)}, function(sub, meta) {
|
||||
sub.Conf(can.base.Obj(item.conf)); if (sub.isSimpleMode()) { (function() { sub.ConfHeight(can.ConfHeight()/2)
|
||||
var msg = can.request(); msg.Echo(sub.Conf(ice.MSG_RESULT)), can.onappend._output(sub, msg, sub.Conf(ctx.DISPLAY))
|
||||
})(); return } var opt = can.base.Obj(item[ice.OPT], []); sub.ConfWidth(can.ConfWidth()), can.page.style(can, sub._output, html.MAX_WIDTH, can.ConfWidth())
|
||||
})(); return }; var opt = can.base.Obj(item[ice.OPT], [])
|
||||
sub.run = function(event, cmds, cb) { var res = can.request(event, can.Option(), opts); for (var i = 0; i < opt.length; i += 2) { res.Option(opt[i], opt[i+1]) }
|
||||
can.run(event, (msg.Option("_index") == can._index? msg[ice.MSG_PREFIX]||[]: [ice.RUN, msg.Option("_index")]).concat(cmds), cb, true)
|
||||
sub.onimport.size(sub, height, can.ConfWidth(), true)
|
||||
}
|
||||
}) })
|
||||
},
|
||||
@ -187,11 +188,11 @@ Volcanos(chat.ONEXPORT, {
|
||||
output: function(can, msg) {},
|
||||
action: function(can, button, line) {},
|
||||
record: function(can, value, key, line) {},
|
||||
actionHeight: function(can) { return can.page.ClassList.has(can, can._target, "output")? 0: html.ACTION_HEIGHT },
|
||||
actionHeight: function(can) { return can.page.ClassList.has(can, can._target, html.OUTPUT)? 0: html.ACTION_HEIGHT },
|
||||
statusHeight: function(can) { return !can.page.isDisplay(can._status) || can._status.innerHTML == "" || (can._target.offsetHeight > 0 && can._status.offsetHeight == 0)? 0: html.ACTION_HEIGHT },
|
||||
title: function(can, title) { can.isCmdMode() && can.user.title(title) },
|
||||
link: function(can) { var meta = can.Conf(), args = can.Option(); can.misc.Search(can, log.DEBUG) == ice.TRUE && (args[log.DEBUG] = ice.TRUE)
|
||||
args.cmd = meta.index||can.core.Keys(meta.ctx, meta.cmd), args.cmd == web.WIKI_WORD && (args.cmd = args.path)
|
||||
args.pod = meta.pod, args.cmd = meta.index||can.core.Keys(meta.ctx, meta.cmd), args.cmd == web.WIKI_WORD && (args.cmd = args.path)
|
||||
return can.misc.MergePodCmd(can, args, true)
|
||||
},
|
||||
})
|
||||
|
10
proto.js
10
proto.js
@ -72,14 +72,13 @@ var mdb = {
|
||||
}
|
||||
var web = {CHAT: "chat",
|
||||
SHARE: "share", SPACE: "space", DREAM: "dream",
|
||||
WEBSITE: "website", DRAW: "draw", PLAY: "play", CLEAR: "clear", REFRESH: "refresh", RESIZE: "resize", FILTER: "filter",
|
||||
WEBSITE: "website", DRAW: "draw", PLAY: "play", CLEAR: "clear", REFRESH: "refresh", RESIZE: "resize", FILTER: "filter", INPUT: "input",
|
||||
CANCEL: "cancel", SUBMIT: "submit", UPLOAD: "upload", DOWNLOAD: "download", TOIMAGE: "toimage",
|
||||
SHARE_CACHE: "/share/cache/", SHARE_LOCAL: "/share/local/",
|
||||
|
||||
GET: "GET", PUT: "PUT", POST: "POST", DELETE: "DELETE",
|
||||
Accept: "Accept", ContentType: "Content-Type", ContentJSON: "application/json", ContentFORM: "application/x-www-form-urlencoded",
|
||||
VIDEO_WEBM: "video/webm",
|
||||
INPUT: "input",
|
||||
IMAGE_PNG: "image/png", VIDEO_WEBM: "video/webm",
|
||||
|
||||
CODE_GIT_STATUS: "web.code.git.status",
|
||||
CODE_XTERM: "web.code.xterm",
|
||||
@ -237,6 +236,7 @@ var html = {PLUGIN_MARGIN: 10, ACTION_HEIGHT: 32, ACTION_MARGIN: 200,
|
||||
DIV_CONTENT: "div.content", TABLE_CONTENT: "table.content", TABLE_LAYOUT: "table.layout", DIV_TOGGLE: "div.toggle",
|
||||
DIV_LAYOUT_HEAD: "div.layout.head", DIV_LAYOUT_FOOT: "div.layout.foot", DIV_LAYOUT_LEFT: "div.layout.left",
|
||||
DIV_FLOAT: "div.float", DIV_TOAST: "div.toast", DIV_CARTE: "div.carte",
|
||||
SPAN_NAME: "span.name",
|
||||
DIV_LAYOUT: "div.layout",
|
||||
DIV_EXPAND: "div.expand",
|
||||
}
|
||||
@ -366,7 +366,9 @@ try { if (typeof(window) == lang.OBJECT) { var meta = Volcanos.meta
|
||||
case nfs.JS: var item = document.createElement(nfs.SCRIPT); item.src = url+v, item.onerror = cb, item.onload = cb, document.body.appendChild(item); break
|
||||
} }
|
||||
window.onerror = function(message, source, lineno, colno, error) { window._version && alert([[source, lineno, colno].join(ice.DF), message].join(ice.NL)) }
|
||||
meta._init = function(can) { window.onerror = function(message, source, lineno, colno, error) { can.misc.Error(message, source, lineno, colno, error) }
|
||||
meta._init = function(can) { window.onerror = function(message, source, lineno, colno, error) {
|
||||
meta.version? alert([message].concat(can.misc._stacks(0, error)).join(ice.NL)): can.misc.Error(message, ice.NL+[source, lineno, colno].join(ice.DF), error)
|
||||
}
|
||||
var last = can.page.width() < can.page.height(); window.onresize = function(event) { can.misc.Event(event, can, function(msg) {
|
||||
if (can.user.isMobile && last === can.page.width() < can.page.height()) { return } last = can.page.width() < can.page.height()
|
||||
can.onmotion.delayOnce(can, function() { can.onengine.signal(can, chat.ONRESIZE, can.request(event, kit.Dict(html.HEIGHT, window.innerHeight, html.WIDTH, window.innerWidth))) }, 100, can._delay_resize = can._delay_resize||[])
|
||||
|
Loading…
x
Reference in New Issue
Block a user