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

opt input.js

This commit is contained in:
harveyshao 2023-02-16 14:45:09 +08:00
parent d4e8cbd4a9
commit f9f88bc461
10 changed files with 73 additions and 139 deletions

View File

@ -152,36 +152,29 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
_option: function(can, meta, option, skip) { var index = -1, args = can.base.Obj(meta.args||meta.arg, []), opts = can.base.Obj(meta.opts, {})
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,
CloneField: can.Clone, CloneInput: function() { can.onmotion.focus(can, add(item)._target) },
Option: can.Option, Action: can.Action, Status: can.Status, Input: can.Input,
_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,
CloneField: can.Clone, CloneInput: function() { can.onmotion.focus(can, add(item)._target) }, Input: can.Input, Option: can.Option, Action: can.Action, Status: can.Status,
}, [item.display, chat.PLUGIN_INPUT_JS], function(sub) { sub.Conf(item)
sub.run = function(event, cmds, cb, silent) { var msg = can.request(event, kit.Dict(chat._TOAST, ice.PROCESS))._caller()
msg.RunAction(event, sub, cmds) || msg.RunAction(event, can.core.Value(can, chat._OUTPUTS_CURRENT), cmds) || can.Update(event, can.Input(cmds, !silent), cb, silent)
}, can._inputs = can._inputs||{}, can._inputs[item.name] = sub, sub.sup = can
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) })} })
skip? next(): can.core.CallFunc([sub.onaction, chat._INIT], {can: sub, meta: item, cb: next, target: sub._target});
(item.action||can.core.Value(meta, [ctx.FEATURE, ctx.INPUTS])) && can.onappend.figure(sub, item, sub._target, function(_sub, value) {
can.onmotion.focus(can, sub._target, value), can.onmotion.delay(can, function() { can.Update() })
})
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})
})
} can.core.Next(can.core.Value(can, [chat.ONIMPORT, mdb.LIST])||meta.inputs, add)
},
_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 cb = meta[button]||meta[chat._ENGINE]; cb? can.core.CallFunc(cb, {event: event, can: can, button: button}): can.run(event, [ctx.ACTION, button].concat(can.sup.Input()), function(msg) {
if (can._fields && can.core.CallFunc([can.sup, chat.ONIMPORT, ice.MSG_PROCESS], {can: can.sup, msg: msg})) { return }
if (can.core.CallFunc([can, chat.ONIMPORT, ice.MSG_PROCESS], {can: can, msg: msg})) { return }
})
function run(event, button) { can.misc.Event(event, can, function(msg) { var _can = can._fields? can.sup: can
var cb = meta[button]||meta[chat._ENGINE]; cb? can.core.CallFunc(cb, {event: event, can: can, button: button}):
can.run(event, [ctx.ACTION, button].concat(_can.Input()), function(msg) { can.core.CallFunc([_can, chat.ONIMPORT, ice.MSG_PROCESS], {can: _can, msg: msg}) })
}) }
return can.core.List(can.page.inputs(can, can.base.getValid(can.base.Obj(list), can.core.Value(can, [chat.ONACTION, mdb.LIST]), meta != can.onaction? can.core.Item(meta): [])||[]), function(item) {
can.base.isUndefined(item) || can.onappend.input(can, item == ""? /* 1.空白 */ {type: html.BR}:
can.base.isString(item)? /* 2.按键 */ {type: html.BUTTON, name: item, value: can.user.trans(can, item, meta._trans), onclick: function(event) {
run(event, item)
}, onkeydown: function(event) { if (event.key == lang.ENTER) { target.click() }}}:
item.length > 0? /* 3.列表 */ {type: html.SELECT, name: item[0], values: item.slice(1), onchange: function(event) { can.misc.Event(event, can, function(msg) {
}}: item.length > 0? /* 3.列表 */ {type: html.SELECT, name: item[0], values: item.slice(1), onchange: function(event) { can.misc.Event(event, can, function(msg) {
var button = event.target.value; meta[item[0]]? can.core.CallFunc(meta[item[0]], [event, can, item[0], button]): meta[button] && can.core.CallFunc(meta[button], [event, can, button])
}) }}: /* 4.其它 */(item.type == html.BUTTON && (item.value = item.value||can.user.trans(can, item.name, meta._trans), item.onclick = item.onclick||function(event) {
run(event, item.name)
@ -318,44 +311,32 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
},
field: function(can, type, item, target) { type = type||html.STORY, item = item||{}
var name = can.core.Split(item.nick||item.name||"").pop()||"", title = !item.help || item.help == name || can.user.language(can) == "en"? name: name+"("+can.core.Split(item.help)[0]+")"
return can.page.Append(can, target||can._output, [{view: [type, html.FIELDSET], list: [
{type: html.LEGEND, list: [{text: title}
]}, {view: [html.OPTION, html.FORM]}, html.ACTION, html.OUTPUT, html.STATUS]}])
return can.page.Append(can, target||can._output, [{view: [type, html.FIELDSET], list: [{text: [title, html.LEGEND]}, {view: [html.OPTION, html.FORM]}, html.ACTION, html.OUTPUT, html.STATUS]}])
},
input: function(can, item, value, target, style) { if ([html.BR, html.HR].indexOf(item.type) > -1) { return can.page.Append(can, target, [item]) }
var icon = [], _item = can.base.Copy({className: "", type: "", name: ""}, item)
var input = can.page.input(can, _item, value); input.title = can.Conf(can.core.Keys(ctx.FEATURE, chat.TITLE, item.name))||""
if (item.type == html.SELECT && (value || _item.value)) { input._init = function(target) { target.value = value||_item.value } }
if (item.type == html.TEXT) { input.onkeydown = item.onkeydown||function(event) {
can.onkeymap.input(event, can), can.onkeymap.selectOutput(event, can), event.key == lang.ENTER && can.onkeymap.prevent(event)
}, input.onfocus = input.onfocus||function(event) {
can.onmotion.selectRange(event.target)
}, icon.push({text: can.page.unicode.delete, className: "icon delete", onclick: function(event) {
_input.value = ""; item.name == html.FILTER && can.page.Select(can, can._output, html.TR, function(tr) { can.page.ClassList.del(can, tr, html.HIDE) })
}}) }
if (item.range) { input._init = function(target) { can.onappend.figure(can, item, target, function(sub, value, old) {
target.value = value, can.core.CallFunc([can.onaction, item.name], [event, can, item.name])
}) } }
var icon = [], _item = can.base.Copy({className: "", type: "", name: ""}, item), input = can.page.input(can, _item, value)
if (item.type == html.TEXT) { input.onfocus = input.onfocus||function(event) { can.onmotion.selectRange(event.target) }
input.onkeydown = item.onkeydown||function(event) { can.onkeymap.input(event, can), can.onkeymap.selectOutput(event, can) }
input.onkeyup = item.onkeyup||function(event) { if (item.name == html.FILTER) { can.user.toast(can, "filter out "+can.page.Select(can, can._output, html.TR, function(tr, index) {
if (!can.page.ClassList.set(can, tr, html.HIDE, index > 0 && tr.innerText.indexOf(event.target.value) == -1)) { return tr }
}).length+" lines") } }
icon.push({icon: mdb.DELETE, onclick: function(event) { _input.value = "", item.name == html.FILTER && can.page.Select(can, can._output, html.TR, function(tr) { can.page.ClassList.del(can, tr, html.HIDE) }) }})
} if (item.range) { input._init = function(target) { can.onappend.figure(can, item, target, function(sub, value, old) { target.value = value, can.core.CallFunc([can.onaction, item.name], [event, can, item.name]) }) } }
var _input = can.page.Append(can, target, [{view: [[html.ITEM, item.type, item.name].concat(style)], list: [input].concat(icon), _init: function(target, _input) {
item.type == html.SELECT && can.onappend.select(can, _input.select, _item)
if (item.type == html.SELECT) { _input.select.value = value||_item.value||_item.values[0], can.onappend.select(can, _input.select, _item) }
}}])[item.name]; return _input
},
select: function(can, select, item) {
return can.page.Append(can, select.parentNode, [{type: html.INPUT, value: item.value||item.values[0], data: {className: html.SELECT, type: html.BUTTON, name: item.name}, onclick: function(event) { var target = event.target
var carte = can.user.carte(event, can, {}, item.values, function(event, button) { if (target.value == button) { return }
target.value = button, select.value = button, select.onchange && select.onchange({target: select}) })
can.onappend.style(can, [html.SELECT, item.name], carte._target), can.page.style(can, carte._target, html.MIN_WIDTH, event.target.offsetWidth)
}, _init: function(target) { can.onmotion.delay(can, function() {
target.value = select.value, can.page.style(can, target, html.WIDTH, select.offsetWidth+10), can.onappend.style(can, html.HIDE, select)
}) }}, {text: ["\u25BF", html.SPAN, html.ICON]}])
select: function(can, select, item) { var carte
return can.page.Append(can, select.parentNode, [{type: html.INPUT, data: {className: html.SELECT, type: html.BUTTON, name: item.name, value: item.value||item.values[0], title: item.name}, onclick: function(event) { var target = event.target
if (carte) { return carte.close(), carte = null } carte = can.user.carte(event, can, {}, item.values, function(event, button) { carte = null; if (target.value == button) { return }
target.value = button, select.value = button, select.onchange && select.onchange({target: select})
}); can.onappend.style(can, [html.SELECT, item.name], carte._target), can.page.style(can, carte._target, html.MIN_WIDTH, event.target.offsetWidth)
}, _init: function(target) { can.page.style(can, target, html.WIDTH, select.offsetWidth+10), can.onappend.style(can, html.HIDE, select) }}, {icon: mdb.SELECT}])
},
table: function(can, msg, cb, target, keys) { if (!msg || msg.Length() == 0) { return } var meta = can.base.Obj(msg.Option(mdb.META))
var table = can.page.AppendTable(can, msg, target||can._output, msg.append, cb||function(value, key, index, line, array) {
if (msg.append.length == 2 && msg.append[0] == mdb.KEY && msg.append[1] == mdb.VALUE) { if (key == mdb.VALUE) { key = line.key }
line = {}, can.core.List(array, function(item) { line[item.key] = item.value })
} function run(event, cmd, arg) { can.misc.Event(event, can, function(msg) {
can.run(can.request(event, line, can.Option()), [ctx.ACTION, cmd].concat(arg))
}) }
function run(event, cmd, arg) { can.misc.Event(event, can, function(msg) { can.run(can.request(event, line, can.Option()), [ctx.ACTION, cmd].concat(arg)) }) }
if (msg.append.length == 2 && msg.append[0] == mdb.KEY && msg.append[1] == mdb.VALUE) { if (key == mdb.VALUE) { key = line.key } line = {}, can.core.List(array, function(item) { line[item.key] = item.value }) }
return {text: [value, html.TD], onclick: function(event) { var target = event.target
if (can.page.tagis(target, html.INPUT) && target.type == html.BUTTON) {
meta && meta[target.name]? can.user.input(can.request(event, {action: target.name}), can, meta[target.name], function(args) { run(event, target.name, args) }): run(event, target.name)
@ -441,23 +422,20 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
}), sub.onaction.close = function() { can.page.Remove(can, sub._target) }
}, can._root._target)
},
figure: function(can, meta, target, cb) { if (meta.type == html.BUTTON || meta.type == html.SELECT) { return }
figure: function(can, meta, target, cb) { if (meta.type == html.SELECT || meta.type == html.BUTTON) { return }
var input = meta.action||mdb.KEY, path = chat.PLUGIN_INPUT+input+nfs._JS; can.require([path], function(can) {
function _cb(sub, value, old) { if (value == old) { return } can.base.isFunc(cb)? cb(sub, value, old): target.value = value }
can.core.ItemCB(can.onfigure[input], function(key, on) { var last = target[key]||function(){}; target[key] = function(event) { can.misc.Event(event, can, function(msg) {
function show(sub, cb) { can.base.isFunc(cb) && cb(sub, _cb), can.onmotion.delay(can, function() {
can.onlayout.figure(event, can, sub._target, false), can.onmotion.toggle(can, sub._target, true)
}) }
target.onkeydown = function() { if (event.key == lang.ESCAPE && target._can) { return target._can.close(), target.blur() } }
can.core.ItemCB(can.onfigure[input], function(key, on) { var last = target[key]||function() { }; target[key] = function(event) { can.misc.Event(event, can, function(msg) {
function show(sub, cb) { can.base.isFunc(cb) && cb(sub, _cb), can.onlayout.figure(event, can, sub._target, false), can.onmotion.toggle(can, sub._target, true) }
can.core.CallFunc(on, {event: event, can: can, meta: meta, cb: _cb, target: target, sub: target._can, last: last, cbs: function(cb) {
target._can? show(target._can, cb): can.onappend._init(can, {type: html.INPUT, name: input, style: meta.name, mode: chat.FLOAT}, [path], function(sub) { sub.Conf(meta)
sub.run = function(event, cmds, cb) { var msg = sub.request(event)
if (meta.range) { for (var i = meta.range[0]; i < meta.range[1]; i += meta.range[2]||1) { msg.Push(mdb.VALUE, i) } cb(msg); return }
(meta.run||can.run)(sub.request(event, can.Option()), cmds, cb, true)
}, target._can = sub, can.base.Copy(sub, can.onfigure[input], true), sub._name = sub._path = path
sub.hidden = function() { return !can.page.isDisplay(sub._target) }, sub.close = function() { can.page.Remove(can, sub._target), delete(target._can) }
meta.mode && can.onappend.style(sub, meta.mode), can.page.style(sub, sub._target, meta.style)
can.base.isFunc(meta._init) && meta._init(sub, sub._target), show(sub, cb)
sub._target._close = sub.close
sub._target._close = sub.close = function() { can.page.Remove(can, sub._target), delete(target._can) }, sub.hidden = function() { return !can.page.isDisplay(sub._target) }
meta.mode && can.onappend.style(sub, meta.mode), can.page.style(sub, sub._target, meta.style), can.base.isFunc(meta._init) && meta._init(sub, sub._target), show(sub, cb)
}, can._root._target)
}})
}) } }), can.onfigure[input]._init && can.onfigure[input]._init(can, meta, target, _cb)

View File

@ -288,7 +288,7 @@ fieldset.plugin.parse.cmd>div.status { display:none; }
fieldset.plugin.inner.cmd>legend { display:none; }
fieldset.plugin.inner.cmd>div.action { display:none; }
fieldset.plugin.inner.cmd>form.option { display:none; }
fieldset.plan div.output table.content { width:100%; }
fieldset.plan div.output table.content { height:100%; width:100%; }
fieldset.xterm div.toggle { display:none; }
fieldset.draw td.content { position:relative; }
fieldset.draw div.output div.content svg { background-color:#1b5b738c; }

View File

@ -54,7 +54,7 @@ Volcanos("page", {
} else if (item.text) { var list = can.core.List(item.text); if (can.base.isArray(list[2])) { list[2] = list[2].join(ice.SP) }
data.innerHTML = list[0]||data.innerHTML||"", type = list[1]||item.type||html.SPAN, list[2] && can.page.ClassList.add(can, data, list[2])
} else if (item.icon) { var list = can.core.List(item.icon)
type = html.SPAN, name = list[0], data.className = list[0], data.innerText = can.page.unicode[list[0]]
type = html.SPAN, name = list[0], data.className = "icon "+list[0], data.innerText = can.page.unicode[list[0]]
} else if (item.button) { var list = can.core.List(item.button); type = html.BUTTON, name = list[0]||name, data.innerText = can.user.trans(can, name)
data.onclick = function(event) { can.misc.Event(event, can, function(msg) { can.base.isFunc(list[1]) && list[1](event, name), can.onkeymap.prevent(event) }) }
} else if (item.select) { var list = item.select; type = html.SELECT, name = list[0][0], data.className = data.className||list[0][0]
@ -241,7 +241,7 @@ Volcanos("page", {
height: function() { return window.innerHeight },
width: function() { return window.innerWidth },
ismodkey: function(event) { return [lang.META, lang.ALT, lang.CONTROL, lang.SHIFT].indexOf(event.key) > -1 },
unicode: {menu: "☰", back: "◀", refresh: "↻", reback: "▶", delete: "✕", lt: "", gt: "", open: "▾", close: "▸", inner: ".."},
unicode: {menu: "☰", back: "◀", refresh: "↻", reback: "▶", delete: "✕", lt: "", gt: "", open: "▾", close: "▸", select: "▿", inner: ".."},
inputs: function(can, list, type) { var _list = []; for (var i = 0; i < list.length; i++) { switch (list[i]) {
case "": _list.push(""); break
case ice.AUTO:

View File

@ -132,8 +132,7 @@ Volcanos("user", {
{view: html.OPTION, list: [{type: html.TABLE, list: can.core.List(form, function(item) {
item = can.base.isString(item)? {type: html.TEXT, name: item}: item.length > 0? {type: html.SELECT, name: item[0], values: item.slice(1)}: item
item.type = item.type||(item.values? html.SELECT: item.name == html.TEXT? html.TEXTAREA: html.TEXT), need[item.name] = item.need
item._init = function(target) { if (item.type == html.SELECT) { return can.onappend.select(can, target, item) }
if (item.type == html.PASSWORD || item.type == html.USERNAME) { return }
item._init = function(target) { if (item.type == html.SELECT) { return can.onmotion.delay(can, function() { can.onappend.select(can, target, item) }) }
if (item.name && item.name != ctx.ACTION) { target.value = msg.Option(item.name)||can.Option(item.name)||target.value||"" }
item.mode = chat.SIMPLE, can.onappend.figure(can, can.base.Copy({run: function(event, cmds, cb) { var _msg = can.request(event, {_handle: ice.TRUE, action: msg.Option(html.ACTION)}, msg, can.Option())
can.page.Select(can, ui.table, html.OPTION_ARGS, function(item) { item.name && item.value && _msg.Option(item.name, item.value) })
@ -141,11 +140,8 @@ Volcanos("user", {
}, _enter: function(event) { return action.submit(event, can, html.SUBMIT), true }}, item), target)
}, item.onkeydown = function(event) { if (event.key == lang.ESCAPE) { event.target.blur() } }
return {type: html.TR, list: [
{type: html.TD, list: [{text: [item.name||"", html.LABEL]}]},
{type: html.TD, list: [{text: item.need == "must"? "*": "", style: {color: cli.RED}}]},
{type: html.TD, list: [can.page.input(can, item), item.type == html.TEXT && {view: [html.ICON, html.SPAN, can.page.unicode.delete], onclick: function(event) {
event.target.previousSibling.value = ""
}}]},
{type: html.TD, list: [{text: [item.name||"", html.LABEL]}]}, {type: html.TD, list: [{text: item.need == "must"? "*": "", style: {color: cli.RED}}]},
{type: html.TD, list: [can.page.input(can, item), item.type == html.TEXT && {icon: "delete", onclick: function(event) { event.target.previousSibling.value = "" }}]},
]}
})}]}, html.ACTION,
]}])

View File

@ -6,7 +6,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { var river = can.Conf(chat.R
sub._target.onclick = function(event) { event.target == sub._target && can.onmotion.scrollHold(can, function() { sub._tabs.click() }) }
})
}, function() { can.isCmdMode() || can.onmotion.delay(can, function() { can.onaction.layout(can)
list[0] == river && list[1] == storm && can.core.List(can._plugins, function(sub) { sub.Conf(ctx.INDEX) == list[2] && can.onmotion.delay(can, function() { sub._tabs.click() }) })
can.onexport.layout(can) && list[0] == river && list[1] == storm && can.core.List(can._plugins, function(sub) { sub.Conf(ctx.INDEX) == list[2] && can.onmotion.delay(can, function() { sub._tabs.click() }) })
}) })
},
_share: function(can, share) { share && can.runAction({}, web.SHARE, [share], function(msg) {
@ -18,7 +18,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { var river = can.Conf(chat.R
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.onimport.size(sub, can.ConfHeight(), can.ConfWidth(), can.onexport.isauto(can)) }
can.onexport.layout(can) == FREE || (can._output.scrollTop = sub._target.offsetTop-html.PLUGIN_MARGIN)
can.misc.SearchHash(can, can.Conf(chat.RIVER), can.Conf(chat.STORM), meta.index)
can.onexport.layout(can) && can.misc.SearchHash(can, can.Conf(chat.RIVER), can.Conf(chat.STORM), meta.index)
}, oncontextmenu: sub._legend.onclick}]; sub._header_tabs = can.page.Append(can, can._header_tabs, tabs)._target, sub._tabs = can.page.Append(can, can._action, tabs)._target
},
_menu: function(can, msg) { if (can.user.isMobile) { return }
@ -39,7 +39,7 @@ Volcanos(chat.ONACTION, {_init: function(can, target) {
}}])._target; can._toggle = target
}); if (!can.Conf(chat.TOOL) && !can.user.mod.isCmd) { return } can._names = location.pathname
can.Conf(chat.TOOL)? can.onappend.layout(can, can._output, FLOW, can.core.List(can.Conf(chat.TOOL), function(item, index, list) { item.type = chat.PLUGIN
if (list.length == 1) { can.onaction._onaction_cmd(can), item.mode = chat.CMD, item.opts = can.misc.Search(can) } return item
if (list.length == 1) { can.user.title(item.index), can.onaction._onaction_cmd(can), item.mode = chat.CMD, item.opts = can.misc.Search(can) } return item
})).layout(window.innerHeight, window.innerWidth): can.runAction(can.request(), ctx.COMMAND, [], function(msg) {
if (msg.Length() == 1) { can.onaction._onaction_cmd(can) } can.onimport._init(can, msg)
})

View File

@ -1,13 +1,10 @@
Volcanos(chat.ONACTION, {
_init: function(can, meta, target) { meta.type == html.BUTTON && meta.action == ice.AUTO && can.base.isUndefined(can.sup._delay_init) && target.click() },
run: function(event, can) { can.run(event) }, refresh: function(event, can) { can.run(event) },
list: function(event, can) { can.sup.isSimpleMode() || can.run(event) },
back: function(event, can) { can.sup.onimport._back(can.sup) },
list: function(event, can) { can.sup.isSimpleMode() || can.run(event) }, back: function(event, can) { can.sup.onimport._back(can.sup) },
onclick: function(event, can) { can.Conf(mdb.TYPE) == html.BUTTON && can.run(event, [ctx.ACTION, can.Conf(mdb.NAME)].concat(can.sup.Input())), can.onkeymap.prevent(event) },
onfocus: function(event, can, target) { can.Conf(mdb.TYPE) == html.TEXT && can.onmotion.selectRange(target) },
onchange: function(event, can) { can.Conf(mdb.TYPE) == html.SELECT && can.run(event) },
onkeydown: function(event, can) { can.onkeymap.input(event, can, event.target)
if (can.Conf(mdb.TYPE) == html.TEXTAREA) { if (!event.ctrlKey) { return } }
onkeydown: function(event, can) { can.onkeymap.input(event, can, event.target); if (can.Conf(mdb.TYPE) == html.TEXTAREA && !event.ctrlKey) { return }
if (event.key == lang.ENTER) { return can.onkeymap.prevent(event), can.run(event), can.onmotion.focus(can, event.target) }
if (!event.ctrlKey) { return } switch (event.key) {
case "m": can.CloneField(); break
@ -15,9 +12,4 @@ Volcanos(chat.ONACTION, {
default: can.onkeymap.selectOutput(event, can.sup); return
} can.onkeymap.prevent(event)
},
onkeyup: function(event, can) { if (event.key == lang.ENTER) { return can.onkeymap.prevent(event) }
if (can.Conf(mdb.NAME) == html.FILTER) { can.user.toast(can, "filter out "+can.page.Select(can, can._output, html.TR, function(tr, index) {
if (!can.page.ClassList.set(can, tr, html.HIDE, index > 0 && tr.innerText.indexOf(event.target.value) == -1)) { return tr }
}).length+" lines") }
},
})

View File

@ -24,7 +24,6 @@ Volcanos(chat.ONFIGURE, {date: {
} show(now), can._show = function(d) { d? _cb(show(now = new Date(now.getTime()+d*24*3600*1000))): _cb(show(now)) }
})},
onkeydown: function(event, can, meta, cb, target, sub, last) { if (sub && sub.hidden()) { return last(event) } switch (event.key) {
case lang.ESCAPE: sub.close(); break
case "n": can.page.SelectInput(can, sub._action, mdb.NEXT, function(target) { target.click(), sub._show() }); break
case "p": can.page.SelectInput(can, sub._action, mdb.PREV, function(target) { target.click(), sub._show() }); break
case "t": can.page.SelectInput(can, sub._action, "today", function(target) { target.click(), sub._show() }); break

View File

@ -1,4 +1,8 @@
Volcanos(chat.ONFIGURE, {key: {
_load: function(event, can, cb, target, name, value) { can.runAction(event, mdb.INPUTS, [name, value||""], function(msg) {
name == ctx.INDEX && can.core.Item(can.onengine.plugin.meta, function(key) { msg.Push(ctx.INDEX, can.core.Keys(ice.CAN, key)) })
can._show(can, msg, cb, target, name)
}) },
_show: function(can, msg, cb, target, name) { if (msg.Length() == 0 || msg.Length() == 1 && msg.Append(name) == target.value) { return can.onmotion.hidden(can) }
if (can.base.isIn(msg.append[msg.append.length-1], ctx.ACTION, "cb")) { msg.append = msg.append.slice(0, -1) }
can.onmotion.clear(can), can.onappend.table(can, msg, function(value, key, index, item) { value = item[key]
@ -9,24 +13,14 @@ Volcanos(chat.ONFIGURE, {key: {
}), can.onappend._status(can, [mdb.TOTAL, mdb.INDEX]), can.Status(mdb.TOTAL, msg.Length())
msg.append.length == 1 && can.page.ClassList.add(can, can._target, chat.SIMPLE), can.onlayout.figure({target: target}, can, can._target)
},
_load: function(event, can, cb, target, name, value) { can.runAction(event, mdb.INPUTS, [name, value||""], function(msg) {
name == ctx.INDEX && can.core.Item(can.onengine.plugin.meta, function(key) { msg.Push(ctx.INDEX, can.core.Keys(ice.CAN, key)) })
can._show(can, msg, cb, target, name)
}) },
onclick: function(event, can, meta, target, cbs) { can.onmotion.focus(can, target) },
onfocus: function(event, can, meta, target, cbs) { cbs(function(sub, cb) { if (sub.Status(mdb.TOTAL) > 0) { return }
meta.msg && meta.msg.Length() > 0? sub._show(sub, meta.msg, cb, target, meta.name): sub._load(event, sub, cb, target, meta.name, target.value)
}) },
onblur: function(event, can, sub) { sub && can.onmotion.delay(can, sub.close, 300) },
onkeydown: function(event, can, meta, cb, target, sub, last) { if (event.key == lang.ESCAPE) { return last(event) }
onkeydown: function(event, can, meta, cb, target, sub, last) {
if (event.key == lang.ENTER) { return meta._enter && (!can.page.tagis(event.target, html.TEXTAREA) || event.ctrlKey) && meta._enter(event)? sub.close(): last(event) }
sub.hidden() || can.onkeymap.selectCtrlN(event, can, sub._output, "tr:not(.hidden)>td:first-child", function(td) { return cb(sub, td.innerText, target.value), td }) || can.onmotion.delayOnce(can, function() {
can.onkeymap.selectInputs(event, sub, function() { sub._load(event, sub, cb, target, meta.name) }, target) }, target.value.length < 3? 500: 150)
if (event.ctrlKey && can.user.isWindows) { can.onkeymap.prevent(event) }
if (can.base.isIn(event.key, "ArrowUp", "ArrowDown") && can.user.isWindows) { can.onkeymap.prevent(event) }
},
onkeyup: function(event, can, meta, cb, target, sub, last) { if (event.key == lang.ESCAPE) { return last(event) }
if (event.ctrlKey && can.user.isWindows) { can.onkeymap.prevent(event) }
if (can.base.isIn(event.key, "ArrowUp", "ArrowDown") && can.user.isWindows) { can.onkeymap.prevent(event) }
},
}})

View File

@ -5,8 +5,4 @@ Volcanos(chat.ONFIGURE, {province: {
chart.setOption({geo: {map: 'china'}}), chart.on(html.CLICK, function(params) { target.value = params.name, can.close() })
}), can.onappend._action(can, [cli.CLOSE], can._action, {close: function() { can.close() }})
}) },
onkeydown: function(event, can, meta, cb, target, sub, last) { if (sub && sub.hidden()) { return last(event) } switch (event.key) {
case lang.ESCAPE: sub.close(); break
}
},
}})

View File

@ -1,12 +1,11 @@
Volcanos(chat.ONIMPORT, {_process: function(can, msg) { msg.OptionStatus() && can.onmotion.clear(can, can._status) && can.onappend._status(can, msg.OptionStatus())
Volcanos(chat.ONIMPORT, {
_process: function(can, msg) { msg.OptionStatus() && can.onmotion.clear(can, can._status) && can.onappend._status(can, msg.OptionStatus())
if (can.onimport[msg.OptionProcess()]) { return can.core.CallFunc([can.onimport, msg.OptionProcess()], {can: can, msg: msg, arg: msg.Option("_arg")}), true }
},
_location: function(can, msg, arg) { can.user.jumps(arg) },
_replace: function(can, msg, arg) { location.replace(arg) },
_history: function(can, msg) { history.back() },
_confirm: function(can, msg, arg) { can.user.toastConfirm(can, arg, "", function() {
can.runAction(can.request({}, msg), "confirm")
}) },
_confirm: function(can, msg, arg) { can.user.toastConfirm(can, arg, "", function() { can.runAction(can.request({}, msg), "confirm") }) },
_refresh: function(can, msg, arg) { can.core.Timer(parseInt(arg||"30"), function() { can.Update(can.request({}, {_count: parseInt(msg.Option("_count")||"3")-1})) }) },
_rewrite: function(can, msg) { var arg = msg._arg; for (var i = 0; i < arg.length; i += 2) { can.Option(arg[i], arg[i+1]), can.Action(arg[i], arg[i+1]) } can.Update() },
_display: function(can, msg) { can.onappend._output(can, msg, msg.Option(ice.MSG_DISPLAY)) },
@ -14,20 +13,19 @@ Volcanos(chat.ONIMPORT, {_process: function(can, msg) { msg.OptionStatus() && ca
_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()-2*html.ACTION_HEIGHT; can.page.Select(can, can._output, html.TABLE, function(target) { height -= target.offsetHeight+4 })
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[ice.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())
})(); return } var opt = can.base.Obj(item[ice.OPT], []); sub.ConfWidth(can.ConfWidth())
sub.run = function(event, cmds, cb) {
var res = can.request(event, can.Option(), opts, {pid: msg.Option("pid")}); for (var i = 0; i < opt.length; i += 2) { res.Option(opt[i], opt[i+1]) }
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)
}
}) })
},
_float: function(can, msg) { var arg = msg._arg
msg.Table(function(item) { can.onappend._plugin(can, item, {mode: chat.FLOAT, index: item.index, args: arg.slice(1)}, function(sub, meta) {
msg.Table(function(item) { can.onappend._plugin(can, item, {index: item.index, args: arg.slice(1), mode: chat.FLOAT}, function(sub, meta) {
sub.run = function(event, cmds, cb) { can.runAction(can.request(event, {path: msg.Option(nfs.PATH), text: msg.Option(mdb.TEXT)}), [ice.RUN, arg[0]], cmds, cb) }
can.getActionSize(function(left, top, width, height) { left = left||0, top = !can.Mode()? 120: 0
sub.onimport.size(sub, can.base.Max(height, can.page.height())-top-(can.user.isMobile&&!can.user.isLandscape()? 2*html.ACTION_HEIGHT: 0), width, true)
@ -35,7 +33,6 @@ Volcanos(chat.ONIMPORT, {_process: function(can, msg) { msg.OptionStatus() && ca
})
}, document.body) })
},
_hold: function(can, msg, arg) { arg && can.user.toast(can, arg) },
_back: function(can) { can._history.pop()
for (var index = 0, his = can._history.pop(); his; his = can._history.pop()) { if (his[0] == ctx.ACTION) { continue }
@ -50,34 +47,25 @@ Volcanos(chat.ONIMPORT, {_process: function(can, msg) { msg.OptionStatus() && ca
}).length == 0) { can.onappend.table(can, msg) } },
_grow: function(can, msg, arg) { var sub = can.core.Value(can, chat._OUTPUTS_CURRENT)
if (sub && sub.onimport && sub.onimport.grow) { return sub.onimport.grow(sub, msg, arg) }
arg = can.page.Color(arg)
if (can.page.Select(can, can._output, html.DIV_CODE, function(div) {
arg = can.page.Color(arg); if (can.page.Select(can, can._output, html.DIV_CODE, function(div) {
return can.page.style(can, div, html.MAX_HEIGHT, 400), can.page.Append(can, div, [{text: arg}]), div.scrollBy(0, 10000), true
}).length == 0) { can.onappend.board(can, arg) }
},
_open: function(can, msg, arg) { return can.user.open(arg) },
size: function(can, height, width, auto, mode) { var sub = can.core.Value(can, chat._OUTPUTS_CURRENT)
height -= can.onexport.actionHeight(can)+can.onexport.statusHeight(can)
if (auto) {
can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, "", html.MAX_HEIGHT, height? can.ConfHeight(height): "", html.MAX_WIDTH, can.ConfWidth(width))
} else {
size: function(can, height, width, auto, mode) { height -= can.onexport.actionHeight(can)+can.onexport.statusHeight(can)
auto? can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, "", html.MAX_HEIGHT, height? can.ConfHeight(height): "", html.MAX_WIDTH, can.ConfWidth(width)):
can.page.style(can, can._output, html.HEIGHT, can.ConfHeight(height), html.WIDTH, can.ConfWidth(width), html.MAX_HEIGHT, "", html.MAX_WIDTH, "")
}
if (!sub) { return auto } sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth())
if (mode) { sub.Mode(can.Mode(mode)), sub.onlayout[mode](sub) } else { sub.onlayout._init(sub) }
return auto
var sub = can.core.Value(can, chat._OUTPUTS_CURRENT); if (!sub) { return auto } sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth())
if (mode) { sub.Mode(can.Mode(mode)), sub.onlayout[mode](sub) } else { sub.onlayout._init(sub) } return auto
},
change: function(event, can, name, value, cb) { return can.page.SelectArgs(can, can._option, "", function(input) {
if (input.name != name || value == input.value) { return } return input.value = value, can.Update(event, can.Input([], true), cb), input
})[0] },
})
Volcanos(chat.ONACTION, {list: [
"刷新界面", "刷新数据", "切换浮动", "切换全屏", "远程控制", "共享工具", "打开链接", "生成链接", "生成脚本", "生成图片", [
"其它", "保存参数", "清空参数", "扩展参数", "复制数据", "下载数据", "清空数据", "删除工具",
"查看文档", "查看脚本", "查看源码", "查看配置", "清理配置", "导出配置", "导入配置", "删除配置",
], [
"调试", "查看日志", "打包页面",
],
"刷新界面", "刷新数据", "切换浮动", "切换全屏", "远程控制", "共享工具", "打开链接", "生成链接", "生成脚本", "生成图片",
["其它", "保存参数", "清空参数", "扩展参数", "复制数据", "下载数据", "清空数据", "删除工具"],
["调试", "查看日志", "打包页面", "查看文档", "查看脚本", "查看源码", "查看配置", "清理配置", "导出配置", "导入配置", "删除配置"],
],
_engine: function(event, can, button) { can.Update(event, [ctx.ACTION, button].concat(can.Input())) },
_switch: function(can, sub, mode, save, load) {
@ -91,8 +79,8 @@ Volcanos(chat.ONACTION, {list: [
} else { var back = (can._mode_list = can._mode_list||[]).pop(); if (!back) { return }
can.ConfHeight(back.height), can.ConfWidth(back.width), can.Mode(back.mode),
can.onmotion.toggle(can, can._action, back.action), can.onmotion.toggle(can, can._status, back.status)
can.page.style(can, can._output, back.output), can.page.style(can, can._target, back.style)
can.base.isFunc(load) && load(back), sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth()), sub.Mode(can.Mode()), sub.onlayout._init(sub)
can.page.style(can, can._output, back.output), can.page.style(can, can._target, back.style), can.base.isFunc(load) && load(back)
sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth()), sub.Mode(can.Mode()), sub.onlayout._init(sub)
}
},
"刷新界面": function(event, can) { var sub = can._outputs[0]; sub.onlayout._init(sub), can.user.toastSuccess(can) },
@ -105,9 +93,9 @@ Volcanos(chat.ONACTION, {list: [
can.ConfHeight(can.page.height()-html.ACTION_HEIGHT-can.onexport.statusHeight(can)), can.ConfWidth(can.page.width())
}) },
"远程控制": function(event, can) { can.onaction.keyboard(event, can) },
"共享工具": function(event, can) { var meta = can.Conf()
can.onmotion.share(event, can, [{name: chat.TITLE, value: meta.name}, {name: chat.THEME, values: [can.getHeader(chat.THEME), html.DARK, html.LIGHT, cli.WHITE, cli.BLACK]}], [mdb.NAME, meta.index, mdb.TEXT, JSON.stringify(can.Input())])
},
"共享工具": function(event, can) { var meta = can.Conf(); can.onmotion.share(event, can, [
{name: chat.TITLE, value: meta.name}, {name: chat.THEME, values: [can.getHeader(chat.THEME), html.DARK, html.LIGHT, cli.WHITE, cli.BLACK]},
], [mdb.NAME, meta.index, mdb.TEXT, JSON.stringify(can.Input())]) },
"打开链接": function(event, can) { can.user.open(can.onexport.link(can)) },
"生成链接": function(event, can) { can.onmotion.share(event, can, [], [mdb.LINK, can.user.copy(event, can, can.onexport.link(can))]) },
"生成脚本": function(event, can) { var conf = can.Conf(), args = can.Input().join(ice.SP), list = [
@ -126,6 +114,8 @@ Volcanos(chat.ONACTION, {list: [
"清空数据": function(event, can) { can.onmotion.clear(can, can._output) },
"删除工具": function(event, can) { can.page.Remove(can, can._target) },
"查看日志": function(event, can) { var sub = can._outputs[0]; sub.onimport.tool(sub, ["can.debug"], function(sub) { sub.select() }) },
"打包页面": function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) },
"查看文档": function(event, can) { can.runAction(event, ctx.CONFIG, [ice.HELP]) },
"查看脚本": function(event, can) { can.runAction(event, ctx.CONFIG, [nfs.SCRIPT]) },
"查看源码": function(event, can) { can.runAction(event, ctx.CONFIG, [nfs.SOURCE]) },
@ -135,9 +125,6 @@ Volcanos(chat.ONACTION, {list: [
"导入配置": function(event, can) { can.runAction(event, mdb.IMPORT) },
"删除配置": function(event, can) { can.runAction(event, ctx.CONFIG, [mdb.REMOVE], function() { can.user.toastProcess(can), can.onmotion.delay(can, function() { can.user.toastSuccess(can), can.Update() }, 1000) }) },
"查看日志": function(event, can) { var sub = can._outputs[0]; sub.onimport.tool(sub, ["can.debug"], function(sub) { sub.select() }) },
"打包页面": function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) },
refresh: function(event, can) { var sub = can.core.Value(can, chat._OUTPUTS_CURRENT); if (!sub) { return }
sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth()), sub.onimport.layout(sub)
},
@ -205,18 +192,10 @@ Volcanos(chat.ONEXPORT, {
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)
},
title: function(can, title) {
can.isCmdMode() && can.user.title(title)
},
title: function(can, title) { can.isCmdMode() && can.user.title(title) },
output: function(can, msg) {},
action: function(can, button, line) {},
record: function(can, value, key, line) {},
actionHeight: function(can) {
return (!can.page.isDisplay(can._option) && !can.page.isDisplay(can._action)) ||
(can._option.innerHTML == "" && can._action.innerHTML == "") ||
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 },
actionHeight: function(can) { return 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 },
})