1
0
forked from x/volcanos
This commit is contained in:
harveyshao 2022-07-04 19:07:47 +08:00
parent a256c59d19
commit 3bc3e7aaa8
2 changed files with 48 additions and 30 deletions

View File

@ -174,7 +174,7 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", list: [], _init: function(can, me
}, },
_option: function(can, meta, option, skip) { meta = meta||{}; var index = -1, args = can.base.Obj(meta.args||meta.arg||meta.opt, []), opts = can.base.Obj(meta.opts, {}) _option: function(can, meta, option, skip) { meta = meta||{}; var index = -1, args = can.base.Obj(meta.args||meta.arg||meta.opt, []), 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++ function add(item, next) { item = can.base.isString(item)? {type: html.TEXT, name: item}: item, item.type != html.BUTTON && index++
return Volcanos(item.name, {_follow: can.core.Keys(can._follow, item.name), return Volcanos(item.name, {_follow: can.core.Keys(can._follow, item.name), _root: can._root,
_target: can.onappend.input(can, item, args[index]||opts[item.name], option||can._option), _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, _option: option||can._option, _action: can._action, _output: can._output, _status: can._status,
Option: can.Option, Action: can.Action, Status: can.Status, CloneField: can.Clone, Option: can.Option, Action: can.Action, Status: can.Status, CloneField: can.Clone,
@ -409,6 +409,7 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", list: [], _init: function(can, me
can.core.ItemCB(can.onfigure[input], function(key, on) { var last = target[key]; target[key] = function(event) { on(event, can, meta, function(cb) { can.core.ItemCB(can.onfigure[input], function(key, on) { var last = target[key]; target[key] = function(event) { on(event, can, meta, function(cb) {
if (target._can) { return can.base.isFunc(cb) && cb(target._can, cbs) } if (target._can) { return can.base.isFunc(cb) && cb(target._can, cbs) }
can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT}, ["/plugin/input/"+input+html._JS], function(sub) { sub.Conf(meta) can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT}, ["/plugin/input/"+input+html._JS], function(sub) { sub.Conf(meta)
sub._root = can._root
sub.run = function(event, cmds, cb) { var msg = sub.request(event, can.Option()); (meta.run||can.run)(event, cmds, cb, true) } sub.run = function(event, cmds, cb) { var msg = sub.request(event, can.Option()); (meta.run||can.run)(event, cmds, cb, true) }
sub.close = function() { can.page.Remove(can, sub._target), delete(target._can) }, target._can = sub sub.close = function() { can.page.Remove(can, sub._target), delete(target._can) }, target._can = sub
@ -420,7 +421,7 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", list: [], _init: function(can, me
can.page.style(sub, sub._target, meta.style), can.onmotion.hidden(can, sub._target) can.page.style(sub, sub._target, meta.style), can.onmotion.hidden(can, sub._target)
can.base.isFunc(cb) && cb(sub, function(sub, hide) { can.onmotion.hidden(can, sub._target, !hide), can.base.isFunc(cbs) && cbs(sub) }) can.base.isFunc(cb) && cb(sub, function(sub, hide) { can.onmotion.hidden(can, sub._target, !hide), can.base.isFunc(cbs) && cbs(sub) })
}, can._root._target) }, document.body)
}, target, last) } }) }, target, last) } })
}) })
}, },
@ -739,35 +740,34 @@ Volcanos(chat.ONMOTION, {help: "动态特效", list: [], _init: function(can, ta
default: target._index = 0; return default: target._index = 0; return
} can.onkeymap.prevent(event) } can.onkeymap.prevent(event)
}, },
selectTableInput: function(event, can, target, cb) { selectTableInput: function(event, can, target, cb) { if (target.value == "") { return cb() }
if (target.value == "") { return cb() }
if (event.ctrlKey) { if (event.ctrlKey) {
function select(order) { if (order == 0) { target.value = target._value } function select(order) {
var index = 0; return can.page.Select(can, can._output, html.TR, function(tr) { var index = 0; return can.page.Select(can, can._output, [html.TBODY, html.TR], function(tr) {
if (can.page.ClassList.has(can, tr, html.HIDDEN)) { return } if (can.page.ClassList.has(can, tr, html.HIDDEN)) { return }
can.page.ClassList.del(can, tr, html.SELECT); if (order != index++) { return tr } can.page.ClassList.del(can, tr, html.SELECT); if (order != index++) { return tr }
can.page.ClassList.add(can, tr, html.SELECT), can.page.Select(can, tr, html.TD, function(td, index) { can.page.ClassList.add(can, tr, html.SELECT), can.page.Select(can, tr, html.TD, function(td, index) {
target._value = target._value||target.value, index == 0 && (target.value = td.innerText) index == 0 && (target.value = td.innerText)
}); return tr }); return tr
}).length }).length
} }
var total = select(target._index); switch (event.key) { var total = select(target._index); switch (event.key) {
case "n": select(target._index = ((target._index)+1) % total); break case "n": select(target._index = (target._index+1) % total - 1); break
case "p": select(target._index = (target._index-1) < 0? total-1: (target._index-1)); break case "p": select(target._index = (target._index-1) < 0? total-1: (target._index-1)); break
default: target._index = 0, target._value = ""; return default: target._index = 0, target._value = ""; return
} return can.onkeymap.prevent(event) } return can.onkeymap.prevent(event)
} }
target._index = 0, target._value = "" target._index = -1, target._value = target.value
can.page.Select(can, can._output, html.TR, function(tr, index) { can.page.Select(can, can._output, [html.TBODY, html.TR], function(tr, index) {
var has = false; can.page.Select(can, tr, html.TD, function(td) { var has = false; can.page.Select(can, tr, html.TD, function(td) {
has = has || td.innerText.indexOf(target.value)>-1 has = has || td.innerText.indexOf(target.value)>-1
}), can.page.ClassList.set(can, tr, html.HIDDEN, !has && index != 0) }), can.page.ClassList.set(can, tr, html.HIDDEN, !has)
}) })
var total = can.page.Select(can, can._output, html.TR, function(tr) { var total = can.page.Select(can, can._output, [html.TBODY, html.TR], function(tr) {
if (!can.page.ClassList.has(can, tr, html.HIDDEN)) { return tr} if (!can.page.ClassList.has(can, tr, html.HIDDEN)) { return tr }
}).length-1; total == 0 && can.base.isFunc(cb) && cb() }).length; total == 0 && can.base.isFunc(cb) && cb()
can.Status(kit.Dict(mdb.TOTAL, total, mdb.INDEX, target._index)) can.Status(kit.Dict(mdb.TOTAL, total, mdb.INDEX, target._index))
}, },
}) })

View File

@ -9,23 +9,33 @@ Volcanos(chat.ONFIGURE, {help: "控件详情", list: [], key: {
}), can.Status(mdb.TOTAL, msg.Length()), can.onmotion.hidden(can, can._target, msg.Length() > 0) }), can.Status(mdb.TOTAL, msg.Length()), can.onmotion.hidden(can, can._target, msg.Length() > 0)
}, },
_show: function(event, can, name, cbs, target, value) { _show: function(event, can, name, cbs, target, value) {
can.run(event, [ctx.ACTION, mdb.INPUTS, name, value||target.value], function(msg) { can.runAction(event, mdb.INPUTS, [name, value||target.value], function(msg) {
can.onfigure.key._init(can, msg, target), can.base.isFunc(cbs) && cbs(can, msg.Length() == 0) can.onfigure.key._init(can, msg, target), can.base.isFunc(cbs) && cbs(can, msg.Length() == 0)
}) })
}, },
// onfocus: function(event, can, meta, cb, target) { if (target._figure) { return } target._figure = {}; cb(function(can, cbs) { onclick: function(event, can, meta, cb, target) {
// target._figure = can.onlayout.figure(event, can, can._target, false, {top: can.page.offsetTop(target)+target.offsetHeight, left: can.page.offsetLeft(target)}) if (target._figure) {
// can.onfigure.key._show(event, can, meta.name, cbs, target), can.onmotion.focus(can, target) target._figure = can.onlayout.figure(event, can, can.core.Value(target, "_can._target")||{})
// }) }, return
onblur: function(event, can, meta, cb, target) { }
target._hold || can.onmotion.delay(can, function() { delete(target._figure), target._can && target._can.close() })
target._hold = false target._figure = {}; cb(function(can, cbs) { target._figure = can.onlayout.figure(event, can)
can.onfigure.key._show(event, can, meta.name, cbs, target), can.onmotion.focus(can, target)
})
},
onkeyup: function(event, can, meta, cb, target, last) { var sub = target._can
sub && can.onmotion.selectTableInput(event, sub, target, function() {
can.onfigure.key._show(event, sub, meta.name, null, target)
}), can.base.isFunc(last) && last(event, can)
}, },
onclick: function(event, can, meta, cb, target) { if (target._figure) { target._figure = can.onlayout.figure(event, can, can.core.Value(target, "_can._target")||{}); return } target._figure = {}; cb(function(can, cbs) {
target._figure = can.onlayout.figure(event, can)
can.onfigure.key._show(event, can, meta.name, cbs, target), can.onmotion.focus(can, target)
}) },
onkeydown: function(event, can, meta, cb, target, last) { var sub = target._can onkeydown: function(event, can, meta, cb, target, last) { var sub = target._can
if (event.ctrlKey) {
switch (event.key) {
case "n":
case "p":
return can.onkeymap.prevent(event)
}
}
switch (event.key) { switch (event.key) {
case lang.SHIFT: break case lang.SHIFT: break
case lang.CONTROL: break case lang.CONTROL: break
@ -38,13 +48,21 @@ Volcanos(chat.ONFIGURE, {help: "控件详情", list: [], key: {
case lang.PS: can.onfigure.key._show(event, sub, meta.name, null, target, target.value+ice.PS); break case lang.PS: can.onfigure.key._show(event, sub, meta.name, null, target, target.value+ice.PS); break
case lang.TAB: case lang.TAB:
if (can.page.tagis(html.TEXTAREA, target)) { if (can.page.tagis(html.TEXTAREA, target)) {
can.onkeymap.insertText(event.target, "\t"), can.onkeymap.prevent(event) can.onkeymap.insertText(event.target, ice.TB), can.onkeymap.prevent(event)
break break
} }
default: default:
sub && can.onmotion.selectTableInput(event, sub, target, function() { // sub && can.onmotion.selectTableInput(event, sub, target, function() {
can.onfigure.key._show(event, sub, meta.name, null, target) // can.onfigure.key._show(event, sub, meta.name, null, target)
}), can.base.isFunc(last) && last(event, can) // }),
can.base.isFunc(last) && last(event, can)
} }
}, },
// onblur: function(event, can, meta, cb, target) {
// target._hold || can.onmotion.delay(can, function() { delete(target._figure), target._can && target._can.close() }), target._hold = false
// },
// onfocus: function(event, can, meta, cb, target) { if (target._figure) { return } target._figure = {}; cb(function(can, cbs) {
// target._figure = can.onlayout.figure(event, can, can._target, false, {top: can.page.offsetTop(target)+target.offsetHeight, left: can.page.offsetLeft(target)})
// can.onfigure.key._show(event, can, meta.name, cbs, target), can.onmotion.focus(can, target)
// }) },
}}) }})