1
0
forked from x/volcanos
This commit is contained in:
harveyshao 2022-10-28 14:16:42 +08:00
parent 4b6410c645
commit a41445b91f
7 changed files with 109 additions and 93 deletions

View File

@ -37,11 +37,11 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) {
if (panel.onengine._plugin(event, can, msg, panel, cmds, cb)) { return }
if (panel.onengine._static(event, can, msg, panel, cmds, cb)) { return }
var toast, _toast = msg.Option(chat._TOAST); if (_toast) { can.onmotion.delay(can, function() { toast = toast||can.user.toastProcess(msg._can, _toast) }) }
var toast, _toast = msg.Option(chat._TOAST); if (_toast) { can.onmotion.delay(can, function() { toast = toast||can.user.toastProcess(msg._can, _toast) }, 1000) }
msg.option = can.core.List(msg.option, function(item) { return [chat._TOAST, ice.MSG_HANDLE].indexOf(item) > -1 && delete(msg[item])? undefined: item })
can.getHeader(chat.TOPIC, function(topic) { msg.Option(chat.TOPIC, topic) })
if (can.base.isUndefined(msg._daemon)) { var sub = msg._can
can.base.isUndefined(sub._daemon) && can.ondaemon._list[0] && (sub._daemon = can.ondaemon._list.push(can)-1)
can.base.isUndefined(sub._daemon) && can.ondaemon._list[0] && (sub._daemon = can.ondaemon._list.push(sub)-1)
if (sub._daemon) { msg.Option(ice.MSG_DAEMON, can.core.Keys(can.ondaemon._list[0], sub._daemon)) }
} can.onengine.signal(panel, chat.ONREMOTE, can.request({}, {_follow: panel._follow, _msg: msg, _cmds: cmds}))
@ -85,13 +85,13 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) {
})
Volcanos(chat.ONDAEMON, {_init: function(can, name) { if (can.user.isLocalFile) { return }
can.misc.WSS(can, {type: html.CHROME, name: can.misc.Search(can, cli.DAEMON)||name||"", text: can.user.title()}, function(event, msg, cmd, arg) { if (!msg) { return }
var sub = can.ondaemon._list[msg.Option(ice.MSG_TARGET)]; can.base.isFunc(sub.ondaemon[cmd])?
can.core.CallFunc(sub.ondaemon[cmd], {can: can, sub: sub, msg: msg, cmd: cmd, arg: arg, cb: function() { msg.Reply() }}):
var sub = can.ondaemon._list[msg.Option(ice.MSG_TARGET)]||can; can.base.isFunc(sub.ondaemon[cmd])?
can.core.CallFunc(sub.ondaemon[cmd], {can: can, msg: msg, sub: sub, cmd: cmd, arg: arg, cb: function() { msg.Reply() }}):
can.onengine._search({}, can, msg, can, [chat._SEARCH, cmd].concat(arg), function() { msg.Reply() })
})
}, _list: [""],
pwd: function(can, msg, arg) { can._wss_name = can.ondaemon._list[0] = arg[0] },
toast: function(can, msg, arg) { can.core.CallFunc(can.user.toast, [can].concat(arg)) },
toast: function(can, msg, sub, arg) { can.core.CallFunc(can.user.toast, [sub].concat(arg)) },
refresh: function(can, msg, sub) { sub.Update() },
input: function(can, msg, sub, arg) { can.page.Select(can, sub._target, "input:focus", function(target) { target.value += arg[0] }) },
action: function(can, msg, sub, arg) {
@ -160,7 +160,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
Option: can.Option, Action: can.Action, Status: can.Status, Input: can.Input,
CloneInput: function() { can.onmotion.focus(can, add(item)._target) }, CloneField: can.Clone,
}, [item.display, chat.PLUGIN_INPUT_JS], function(sub) { sub.Conf(item)
sub.run = function(event, cmds, cb, silent) { var msg = can.request(event)
sub.run = function(event, cmds, cb, silent) { var msg = can.request(event, kit.Dict(chat._TOAST, ice.PROCESS))
if (msg.RunAction(event, sub, cmds)) { return }
if (msg.RunAction(event, can.core.Value(can, chat._OUTPUTS_CURRENT), cmds)) { return }
can.Update(event, can.Input(cmds, !silent), cb, silent)
@ -169,7 +169,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
can.core.ItemCB(sub.onaction, function(key, cb) { sub._target[key] = function(event) { cb(can.request(event)._event, sub) } })
can.core.ItemCB(item, function(key, cb) { sub._target[key] = function(event) { cb(can.request(event)._event, sub) } })
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) {
// (item.action||can.core.Value(meta, [ctx.FEATURE, ctx.INPUTS])) && can.onappend.figure(sub, item, sub._target, function(_sub, value) {
can.onappend.figure(sub, item, sub._target, function(_sub, value) {
sub._target.value = value, can.onmotion.focus(can, sub._target), can.onmotion.delay(can, function() { can.Update() })
})
})
@ -178,7 +179,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
_action: function(can, list, action, meta) { meta = meta||can.onaction||{}, action = action||can._action, can.onmotion.clear(can, action)
return can.core.List(can.page.inputs(can, can.base.getValid(can.base.Obj(list), can.core.Value(can, [chat.ONACTION, mdb.LIST]), can.core.Item(meta))||[]), function(item) {
!can.base.isUndefined(item) && can.onappend.input(can, item == ""? /* 空白 */ {type: html.SPACE}:
can.base.isString(item)? /* 按键 */ {type: html.BUTTON, value: can.user.trans(can, item), onclick: function(event) {
can.base.isString(item)? /* 按键 */ {type: html.BUTTON, name: item, value: can.user.trans(can, item), onclick: function(event) {
var cb = meta[item]||meta[chat._ENGINE]; cb? can.core.CallFunc(cb, {event: event, can: can, button: item}): can.run(event, [ctx.ACTION, item].concat(can.sup.Input()))
}, onkeydown: function(event) { if (event.key == lang.ENTER) {
var cb = meta[item]||meta[chat._ENGINE]; cb? can.core.CallFunc(cb, {event: event, can: can, button: item}): can.run(event, [ctx.ACTION, item].concat(can.sup.Input()))
@ -251,7 +252,9 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
case html.SPACE: return can.page.Append(can, target, [{view: can.base.join([html.ITEM, html.SPACE])}])
}
var input = can.page.input(can, can.base.Copy({}, item), value)
if (item.type == html.SELECT && item.value) { input._init = function(target) { target.value = item.value } }
if (item.type == html.SELECT && item.value) {
input._init = function(target) { target.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)
} }
@ -330,19 +333,22 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
can.onappend._plugin(can, value, meta, cbs, target, field)
}) }); return res
},
figure: function(can, meta, target, cb) { if (meta.action == ice.AUTO || can.base.In(meta.type, html.BUTTON, html.SELECT)) { return }
figure: function(can, meta, target, cb) { if (meta.action == ice.AUTO || can.base.isIn(meta.type, html.BUTTON)) { return }
var input = meta.action||mdb.KEY; can.require([chat.PLUGIN_INPUT+input+nfs._JS], function(can) {
function _cb(sub, value, old) { if (value == old) { return } can.base.isFunc(cb)? cb(sub, value, old): target.value = value||"", can.onmotion.focus(can, target) }
can.core.ItemCB(can.onfigure[input], function(key, on) { var last = target[key]; target[key] = function(event) {
can.core.CallFunc(on, {event: event, can: can, meta: meta, target: target, last: last||function(){}, sub: target._can, cb: _cb, cbs: function(cb) {
can.core.ItemCB(can.onfigure[input], function(key, on) { var last = target[key]||function(){}; target[key] = function(event) {
target._can && can.onlayout.figure(event, can, target._can._target)
can.core.CallFunc(on, {event: event, can: can, meta: meta, cb: _cb, target: target, sub: target._can, last: last, cbs: function(cb) {
if (target._can) { return can.onmotion.toggle(can, target._can._target, true), can.base.isFunc(cb) && cb(target._can, _cb) }
can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT, mode: meta.mode}, [chat.PLUGIN_INPUT+input+nfs._JS], 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, sub.close = function() { can.page.Remove(can, sub._target), delete(target._can) }
}, target._can = sub, can.base.Copy(sub, can.onfigure[input], true)
sub.close = function() { can.page.Remove(can, sub._target), delete(target._can) }
sub.hidden = function() { return sub._target.style.display == html.NONE }
can.onlayout.figure({target: target}, can, sub._target), can.page.style(sub, sub._target, meta.style)
can.page.style(can, sub._outupt, html.MAX_HEIGHT, can.page.height()-sub._target.offsetTop-2*html.ACTION_HEIGHT)
can.page.style(can, sub._output, html.MAX_HEIGHT, can.base.Max(can.page.height()-sub._target.offsetTop-2*html.ACTION_HEIGHT, can.page.height()/2))
can.base.isFunc(cb) && cb(sub, _cb), can.base.isFunc(meta._init) && meta._init(sub, sub._target)
}, document.body)
}})
@ -509,7 +515,6 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) {
document.body.onclick = function(event) {
if (can.page.tagis(event.target, html.SELECT, html.INPUT, html.TEXTAREA)) { return }
if (can.page.tagis(event.target, html.A) && can.user.isWebview) { return event.shiftKey? window.outopen(event.target.href): can.user.open(event.target.href) }
// can.page.Select(can, document.body, can.page.Keys("div.carte.float", "fieldset.input.key.float"), function(target) { can.page.Remove(can, target) })
can.page.Select(can, document.body, can.page.Keys("div.carte.float"), function(target) { can.page.Remove(can, target) })
}
can.onkeymap._build(can), document.body.onkeydown = function(event) {
@ -636,4 +641,3 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) {
},
prevent: function(event) { event && (event.stopPropagation(), event.preventDefault()); return true },
})

View File

@ -8,12 +8,12 @@ Volcanos("base", {
if (val.length > 0) { return val } for (var k in val) { return val } return def
} catch (e) { return val&&val.split&&val.split(ice.FS) || def }
},
Copy: function(to, from, skip) { if (!from) { return to }
if (arguments.length == 2 || typeof skip == lang.BOOLEAN) {
Copy: function(to, from, hold) { if (!from) { return to }
if (arguments.length == 2 || typeof hold == lang.BOOLEAN) {
for (var k in from) {
if (skip && to[k] != undefined) { continue }
if (from[k] === "") { delete(to[k]); continue }
to[k] = from[k]
if (k == undefined) { continue }
if (hold && to.hasOwnProperty(k) && to[k] != undefined) { continue }
if (from[k] === "") { delete(to[k]) } else { to[k] = from[k] }
} return to
} for (var i = 2; i < arguments.length; i++) { var k = arguments[i]; to[k] = from[k] } return to
},
@ -95,7 +95,7 @@ Volcanos("base", {
} return res
},
AddUniq: function(list, value) { list = list||[]; return list.indexOf(value) == -1 && list.push(value), list },
In: function(item) { var args = arguments; for (var i = 1; i < args; i++) {
isIn: function(item) { var args = arguments; for (var i = 1; i < args; i++) {
if (typeof args[i] == lang.OBJECT && args[i].length > 0 && args[i].indexOf(item) > -1) { return true }
if (item == args[i]) { return true }
} },

View File

@ -84,7 +84,7 @@ Volcanos("user", {info: {}, agent: {
can.user.copy(event, can, meta.title)
}}, {view: "duration", title: "点击关闭", onclick: function() { action.close() }},
can.base.isObject(meta.content)? meta.content: {text: [meta.content||"", html.DIV, nfs.CONTENT]},
html.ACTION, can.base.isUndefined(meta.progress) && {view: "progress", style: {width: width}, list: [
html.ACTION, !can.base.isUndefined(meta.progress) && {view: "progress", style: {width: width}, list: [
{view: "current", style: {width: (meta.progress||0)/100*width}},
]},
] }]); can.onengine.signal(can, chat.ONTOAST, can.request({}, {time: can.misc._time(), title: meta.title, content: meta.content, fileline: can.misc.FileLine(-3)}))
@ -95,7 +95,8 @@ Volcanos("user", {info: {}, agent: {
timer: can.core.Timer({interval: 100, length: (parseInt(meta.duration||1000))/100}, function(event, interval, index) {
if (index > 30) { ui.duration.innerHTML = parseInt(index/10)+ice.PT+(index%10)+"s..." }
}, function() { action.close() }), _target: ui._target, ui: ui,
}); can.onmotion.story.auto(can, ui._target); return action
}); can.onmotion.story.auto(can, ui._target)
return can._toast && (can._toast.close(), delete(can._toast)), can._toast = action
},
share: function(can, msg, cmd) {
can.run(msg, cmd||[ctx.ACTION, chat.SHARE], function(msg) {

View File

@ -176,7 +176,7 @@ div.output.card div.item.stop { color:gray; }
/* white */
body.white { background-color:rgba(5,34,56,0.75); color:white; }
body.white select { background-color:yellowgreen; color:white; }
body.white select { background-color:yellowgreen; color:white; opacity:1; }
body.white textarea { background-color:white; }
body.white input[type=password] { background-color:white; }
body.white input[type=text] { background-color:white; }

View File

@ -1,12 +1,12 @@
Volcanos(chat.ONACTION, {
_init: function(can, meta, target) { meta.type == html.BUTTON && meta.action == ice.AUTO && !can.sup._delay_init && target.click() },
run: function(event, can) { can.run(can.request(event, {_toast: ice.PROCESS})) },
list: function(event, can) { can.sup.Conf("mode") != chat.SIMPLE && can.run(event) },
run: 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) },
refresh: function(event, can) { can.run(event) },
onclick: function(event, can) { can.Conf(mdb.TYPE) == html.BUTTON && can.run(can.request(event, {_toast: ice.PROCESS}), [ctx.ACTION, can.Conf(mdb.NAME)].concat(can.sup.Input())) },
onchange: function(event, can) { can.Conf(mdb.TYPE) == html.SELECT && can.run(can.request(event, {_toast: ice.PROCESS})) },
onclick: function(event, can) { can.Conf(mdb.TYPE) == html.BUTTON && can.run(event, [ctx.ACTION, can.Conf(mdb.NAME)].concat(can.sup.Input())) },
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 } }
if (event.key == lang.ENTER) { return can.run(event), can.onmotion.focus(can, event.target), can.onkeymap.prevent(event) }

View File

@ -1,60 +1,61 @@
Volcanos(chat.ONFIGURE, {help: "控件详情", date: {onclick: function(event, can, meta, cb, target) { cb(function(can, cbs) {
function set(now) { cbs(can, can.user.time(can, now), target.value) }
Volcanos(chat.ONFIGURE, {date: {
onclick: function(event, can, meta, target, cbs) { cbs(function(can, cb) {
function set(now) { cb(can, can.user.time(can, now), target.value) }
// 添加控件
var now = target.value? new Date(target.value): new Date()
can._trans = kit.Dict("today", "今天", mdb.NEXT, "下一月", mdb.PREV, "上一月")
can.onmotion.clear(can, can._action), can.onappend._action(can, [cli.CLOSE,
["hour"].concat(can.core.List(24)), ["minute"].concat(can.core.List(0, 60, 5)), ["second"].concat(can.core.List(0, 60, 5)),
"today", "", mdb.PREV, ["year"].concat(can.core.List(now.getFullYear() - 10, now.getFullYear() + 10)),
["month"].concat(can.core.List(1, 13)), mdb.NEXT,
], can._action, {close: function(event) { can.close() },
"hour": function(event, can, key, value) { now.setHours(parseInt(value)||0), show(now) },
"minute": function(event, can, key, value) { now.setMinutes(parseInt(value)||0), show(now) },
"second": function(event, can, key, value) { now.setSeconds(parseInt(value)||0), show(now) },
"today": function(event) { now = new Date(), set(show(now)) },
var now = target.value? new Date(target.value): new Date()
can.user.trans(can, kit.Dict("today", "今天", mdb.NEXT, "下一月", mdb.PREV, "上一月"))
can.onmotion.clear(can, can._action), can.onappend._action(can, [cli.CLOSE,
["hour"].concat(can.core.List(24)), ["minute"].concat(can.core.List(0, 60, 5)), ["second"].concat(can.core.List(0, 60, 5)),
"today", "", mdb.PREV, ["year"].concat(can.core.List(now.getFullYear() - 10, now.getFullYear() + 10)),
["month"].concat(can.core.List(1, 13)), mdb.NEXT,
], can._action, {close: function(event) { can.close() },
"hour": function(event, can, key, value) { now.setHours(parseInt(value)||0), show(now) },
"minute": function(event, can, key, value) { now.setMinutes(parseInt(value)||0), show(now) },
"second": function(event, can, key, value) { now.setSeconds(parseInt(value)||0), show(now) },
"today": function(event) { now = new Date(), set(show(now)) },
"prev": function(event) { now.setMonth(now.getMonth()-1), show(now) },
"year": function(event, can, key, value) { now.setFullYear(parseInt(value)), show(now) },
"month": function(event, can, key, value) { now.setMonth(parseInt(value)-1), show(now) },
"next": function(event) { now.setMonth(now.getMonth()+1), show(now) },
"prev": function(event) { now.setMonth(now.getMonth()-1), set(show(now)) },
"year": function(event, can, key, value) { now.setFullYear(parseInt(value)), show(now) },
"month": function(event, can, key, value) { now.setMonth(parseInt(value)-1), show(now) },
"next": function(event) { now.setMonth(now.getMonth()+1), set(show(now)) },
"随机": function(event) { now.setDate((Math.random() * 100 - 50) + now.getDate()), show(now) },
"前一年": function(event) { now.setFullYear(now.getFullYear()-1), show(now) },
"后一年": function(event) { now.setFullYear(now.getFullYear()+1), show(now) },
})
"随机": function(event) { now.setDate((Math.random() * 100 - 50) + now.getDate()), show(now) },
"前一年": function(event) { now.setFullYear(now.getFullYear()-1), show(now) },
"后一年": function(event) { now.setFullYear(now.getFullYear()+1), show(now) },
})
can.onmotion.clear(can, can._status)
can._table = can.page.Appends(can, can._output, [{view: [chat.CONTENT, html.TABLE]}]).first
var today = new Date(); function show(now) {
// 设置控件
can.Action("year", now.getFullYear())
can.Action("month", now.getMonth()+1)
can.Action("hour", now.getHours())
can.Action("minute", parseInt(now.getMinutes()/5)*5)
can.Action("second", parseInt(now.getSeconds()/5)*5)
can._table = can.page.Appends(can, can._output, [{view: [chat.CONTENT, html.TABLE]}]).first
var today = new Date(); function show(now) {
can.Action("year", now.getFullYear())
can.Action("month", now.getMonth()+1)
can.Action("hour", now.getHours())
can.Action("minute", parseInt(now.getMinutes()/5)*5)
can.Action("second", parseInt(now.getSeconds()/5)*5)
// 设置组件
can.page.Appends(can, can._table, [{th: ["日", "一", "二", "三", "四", "五", "六"]}])
var tr; function add(day, type) { if (day.getDay() == 0) { tr = can.page.Append(can, can._table, [{type: html.TR}]).last }
can.page.Append(can, tr, [{text: [day.getDate(), html.TD, can.base.Time(today, "%y-%m-%d") == can.base.Time(day, "%y-%m-%d")? html.SELECT: type],
dataset: {date: day.getTime()}, onclick: function(event) {
set(now = new Date(parseInt(event.target.dataset.date)))
},
}])
}
can.page.Appends(can, can._table, [{th: ["日", "一", "二", "三", "四", "五", "六"]}])
var tr; function add(day, type) { if (day.getDay() == 0) { tr = can.page.Append(can, can._table, [{type: html.TR}]).last }
can.page.Append(can, tr, [{text: [day.getDate(), html.TD, can.base.Time(today, "%y-%m-%d") == can.base.Time(day, "%y-%m-%d")? html.SELECT: type],
dataset: {date: day.getTime()}, onclick: function(event) { set(now = new Date(parseInt(event.target.dataset.date))) },
}])
}
// 时间区间
var one = new Date(now); one.setDate(1)
var end = new Date(now); end.setMonth(now.getMonth()+1), end.setDate(1)
var head = new Date(one); head.setDate(one.getDate()-one.getDay())
var tail = new Date(end); tail.setDate(end.getDate()+7-end.getDay())
var one = new Date(now); one.setDate(1)
var end = new Date(now); end.setMonth(now.getMonth()+1), end.setDate(1)
var head = new Date(one); head.setDate(one.getDate()-one.getDay())
var tail = new Date(end); tail.setDate(end.getDate()+7-end.getDay())
// 时间序列
for (var day = new Date(head); day < one; day.setDate(day.getDate()+1)) { add(day, mdb.PREV) }
for (var day = new Date(one); day < end; day.setDate(day.getDate()+1)) { add(day, mdb.MAIN) }
for (var day = new Date(end); end.getDay() != 0 && day < tail; day.setDate(day.getDate()+1)) { add(day, mdb.NEXT) }
return now
} show(now), can.onlayout.figure(event, can)
})}} })
for (var day = new Date(head); day < one; day.setDate(day.getDate()+1)) { add(day, mdb.PREV) }
for (var day = new Date(one); day < end; day.setDate(day.getDate()+1)) { add(day, mdb.MAIN) }
for (var day = new Date(end); end.getDay() != 0 && day < tail; day.setDate(day.getDate()+1)) { add(day, mdb.NEXT) }
return now
} show(now)
can._show = function(_now) { set(now = show(_now)) }
can._now = function() { return now }
})},
onkeydown: function(event, can, meta, cb, target, sub, last) { if (sub.hidden()) { return } switch (event.key) {
case "n": can.page.Select(can, sub._action, "input[name=next]", function(target) { target.click() }); break
case "p": can.page.Select(can, sub._action, "input[name=prev]", function(target) { target.click() }); break
case "j": sub._show(can.base.TimeAdd(sub._now(), 1)); break
case "k": sub._show(can.base.TimeAdd(sub._now(), -1)); break
} },
} })

View File

@ -1,24 +1,34 @@
Volcanos(chat.ONFIGURE, {key: {
_show: function(can, msg, cb, target, name) { if (!can.onmotion.toggle(can, can._target, msg.Length() != 0)) { return }
_show: function(can, msg, cb, target, name) { if (msg.Length() == 0 || msg.Length() == 1 && msg.Append(name) == target.value) { return can.onmotion.hidden(can) }
can.onmotion.clear(can), can.onappend.table(can, msg, function(value, key, index, line) { value = line[key]
return {text: [value, html.TD], style: msg.append && msg.append.length == 1? kit.Dict(html.MIN_WIDTH, target.offsetWidth-16): {}, onclick: function(event) {
cb(can, value, target.value), msg.Option(ice.MSG_PROCESS) == ice.PROCESS_AGAIN && can.onmotion.delay(can, function() { can.onfigure.key._load(event, can, cb, target, name, value) })
cb(can, value, target.value), msg.Option(ice.MSG_PROCESS) == ice.PROCESS_AGAIN && can.onmotion.delay(can, function() { can._load(event, can, cb, target, name, value) })
can._delay_hidden = true
}}
}), can.onappend._status(can, [mdb.TOTAL, mdb.INDEX]), can.Status(mdb.TOTAL, msg.Length())
},
_load: function(event, can, cb, target, name, value) { can.runAction(event, mdb.INPUTS, [name, value||target.value], function(msg) {
_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.onfigure.key._show(can, msg, cb, target, name)
can._show(can, msg, cb, target, name)
}) },
onfocus: function(event, can, meta, target, cbs) { can.onmotion.delay(can, function() { cbs(function(sub, cb) { if (sub.Status(mdb.TOTAL) > 0) { return }
meta.msg && meta.msg.Length() > 0? can.onfigure.key._show(sub, meta.msg, cb, target, meta.name): can.onfigure.key._load(event, sub, cb, target, meta.name)
}) }, 30) },
onblur: function(event, can, sub) { can.onmotion.delay(can, function() { can.onmotion.hidden(can, sub._target) }, 10) },
onkeydown: function(event, can, meta, cb, target, sub, last) { switch (event.key) {
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)
}) },
onclick: 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) {
can.onmotion.delay(can, function() { sub._delay_hidden || can.onmotion.hidden(can, sub._target), sub._delay_hidden = false }, 300)
},
onkeydown: function(event, can, meta, cb, target, sub, last) { if (sub.hidden()) { return } switch (event.key) {
case "n":
case "p":
case lang.TAB: can.onkeymap.selectInputs(event, sub, function() { can.onfigure.key._load(event, sub, cb, target, meta.name) }, target); break
case lang.TAB: can.onkeymap.selectInputs(event, sub, function() { sub._load(event, sub, cb, target, meta.name) }, target); break
case lang.ENTER: if (meta._enter && (!can.page.tagis(event.target, html.TEXTAREA) || event.ctrlKey) && meta._enter(event)) { break }
default: can.onkeymap.selectCtrlN(event, can, sub._output, "tr:not(.hidden) td:first-child", function(td) { return cb(sub, td.innerText, target.value), td }) || last(event)
default: can.onkeymap.selectCtrlN(event, can, sub._output, "tr:not(.hidden)>td:first-child", function(td) { return cb(sub, td.innerText, target.value), td }) || last(event)
target.value == "" && sub._load(event, sub, cb, target, meta.name)
} },
}})