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

opt key.js

This commit is contained in:
shaoying 2022-10-28 10:23:29 +08:00
parent 3795bbf6e2
commit 4b6410c645
5 changed files with 52 additions and 88 deletions

View File

@ -166,8 +166,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
can.Update(event, can.Input(cmds, !silent), cb, silent)
}, can._inputs[item.name] = sub, sub.sup = can
can.core.ItemCB(sub.onaction, function(key, cb) { sub._target[key] = function(event) { cb(can.request(event), sub) } })
can.core.ItemCB(item, function(key, cb) { sub._target[key] = function(event) { cb(can.request(event), sub) } })
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) {
sub._target.value = value, can.onmotion.focus(can, sub._target), can.onmotion.delay(can, function() { can.Update() })
@ -330,21 +330,23 @@ 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, cbs) { if ([html.BUTTON, html.SELECT].indexOf(meta.type) > -1) { return }
var input = meta.action||mdb.KEY; input != ice.AUTO && can.require([chat.PLUGIN_INPUT+input+nfs._JS], function(can) {
can.core.ItemCB(can.onfigure[input], function(key, on) { var last = target[key]; target[key] = function(event) { on(event, can, meta, function(cb) {
function _cbs(sub, value, old) { can.onmotion.hidden(can, sub._target), can.base.isFunc(cbs)? cbs(sub, value, old): target.value = value||"", can.onmotion.delay(can, function() { can.onmotion.focus(can, target) }) }
if (target._can) { return can.onmotion.toggle(can, target._can._target, true), can.base.isFunc(cb) && cb(target._can, _cbs) }
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 = can.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)
}
can.onlayout.figure({target: target}, can, sub._target), can.page.style(sub, sub._target, meta.style)
target._can = sub, sub.close = function() { can.page.Remove(can, sub._target), delete(target._can) }
can.base.isFunc(cb) && cb(sub, _cbs), can.base.isFunc(meta._init) && meta._init(sub, sub._target)
}, document.body)
}, target, last) } }), can.onfigure[input]._init && can.onfigure[input]._init(can, target)
figure: function(can, meta, target, cb) { if (meta.action == ice.AUTO || can.base.In(meta.type, html.BUTTON, html.SELECT)) { 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) {
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) }
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.base.isFunc(cb) && cb(sub, _cb), can.base.isFunc(meta._init) && meta._init(sub, sub._target)
}, document.body)
}})
} }), can.onfigure[input]._init && can.onfigure[input]._init(can, target, _cb)
})
},
})
@ -479,6 +481,7 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) {
move: function(can, target, layout, cb) { var begin; layout = layout||{}
can.page.style(can, target, layout), target.onmousedown = function(event) {
if (!event.ctrlKey) { return }
layout.height = target.offsetHeight, layout.width = target.offsetWidth
layout.left = target.offsetLeft, layout.top = target.offsetTop
begin = can.base.Copy({x: event.x, y: event.y}, layout)
@ -506,7 +509,8 @@ 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", "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) {
var msg = can.request(event, {"model": "normal"}); if (msg.Option(ice.MSG_HANDLE) == ice.TRUE) { return }
@ -597,9 +601,12 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) {
return target.setSelectionRange(start, start), cut
},
selectCtrlN: function(event, can, target, key, cb) { if (!event.ctrlKey || event.key < "0" || event.key > "9") { return }
return can.page.Select(can, target, key, function(target, index) { if (index+1 == event.key) { return cb(target) } })[0]
},
selectInputs: function(event, can, cb, target) {
if ([lang.META, lang.ALT, lang.CONTROL, lang.SHIFT].indexOf(event.key) > -1) { return }
if (event.ctrlKey) { if (can.base.isUndefined(target._index)) { target._index = -1, target._value = target.value }
if (can.page.ismodkey(event)) { return }
if (event.ctrlKey || event.key == lang.TAB) { if (can.base.isUndefined(target._index)) { target._index = -1, target._value = target.value }
function select(order) { if (order == -1) { target.value = target._value }
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 }
@ -609,6 +616,7 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) {
}).length
}
var total = select(target._index); switch (event.key) {
case lang.TAB: can.onkeymap.prevent(event)
case "n": select(target._index = (target._index+2) % (total+1) - 1); break
case "p": select(target._index = (target._index+total+1) % (total+1) - 1); break
default: return

View File

@ -95,6 +95,10 @@ 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++) {
if (typeof args[i] == lang.OBJECT && args[i].length > 0 && args[i].indexOf(item) > -1) { return true }
if (item == args[i]) { return true }
} },
Date: function(time) { var now = new Date()
if (typeof time == lang.STRING && time != "") { var ls = time.split(ice.SP)

View File

@ -250,4 +250,5 @@ Volcanos("page", {ClassList: {
draggable: function(can, item, ok) { item.setAttribute("draggable", ok) },
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 },
})

View File

@ -1,71 +1,24 @@
Volcanos(chat.ONFIGURE, {key: {
_load: function(event, can, cbs, target, name, value) {
can.runAction(event, mdb.INPUTS, [name, value||target.value], function(msg) {
if (name == ctx.INDEX) {
can.core.Item(can.onengine.plugin.meta, function(key, cb) {
msg.Push(ctx.INDEX, can.core.Keys("can", key))
})
}
can.onfigure.key._show(can, msg, cbs, target, name)
})
},
_select: function(event, can, target) {
if (event.ctrlKey) { var sub = target._can
if (event.key <= "9" && event.key >= "0") {
can.page.Select(can, sub._output, "tr:not(.hidden) td:first-child", function(td, index) {
if (index+1 == event.key) { target.value = td.innerText }
}); return true
}
} return false
},
_show: function(can, msg, cbs, target, name) {
if (!can.onmotion.toggle(can, can._target, msg.Length() != 0)) { return }
_show: function(can, msg, cb, target, name) { if (!can.onmotion.toggle(can, can._target, msg.Length() != 0)) { return }
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? {"min-width": target.offsetWidth-16}: {}, onclick: function(event) { can.base.isFunc(cbs) && cbs(can, value, target.value)
msg.Option(ice.MSG_PROCESS) == ice.PROCESS_AGAIN && can.onmotion.delay(can, function() {
can.onfigure.key._load(event, can, cbs, target, name, value)
})
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) })
}}
}), can.onappend._status(can, [mdb.TOTAL, mdb.INDEX]), can.Status(mdb.TOTAL, msg.Length())
can.getActionSize(function(left, top, width, height) { left = left||0, top = top||0
can.page.style(can, can._target, html.MAX_HEIGHT, can.base.Max(can.page.height()-can._target.offsetTop-html.ACTION_HEIGHT, 600))
})
},
_make: function(event, can, meta, cb, target, last) {
var sub = target._can; if (sub && sub._cbs) { return }
cb(function(sub, cbs) { sub._cbs = cbs
if (meta.msg && meta.msg.Length() > 0) {
can.onfigure.key._show(sub, meta.msg, cbs, target, meta.name)
} else {
can.onfigure.key._load(event, sub, cbs, target, meta.name)
}
})
},
onclick: function(event, can, meta, cb, target) {
target._can && target._can.close()
can.onfigure.key._make(event, can, meta, cb, target)
},
onfocus: function(event, can, meta, cb, target, last) {
can.onfigure.key._make(event, can, meta, cb, target)
},
onkeydown: function(event, can, meta, cb, target, last) {
switch (event.key) {
case "Escape": target._can? target._can.close(): target.blur(); return
case "Tab": target._can && target._can.close(); return
case "n":
case "p": event.ctrlKey && can.onkeymap.prevent(event); break
case "Enter": if (meta._enter && (!can.page.tagis(event.target, html.TEXTAREA) || event.ctrlKey)) {
if (meta._enter(event)) { return } break
}
default: can.base.isFunc(last) && last(event, can)
}
can.onfigure.key._make(event, can, meta, cb, target)
},
onkeyup: function(event, can, meta, cb, target, last) { var sub = target._can; if (!sub) { return }
if (can.onfigure.key._select(event, can, target)) { return }
switch (event.key) {
case ice.PS: can.onfigure.key._load(event, sub, sub._cbs, target, meta.name, event.target.value); break
}
can.onkeymap.selectInputs(event, sub, function() { can.onfigure.key._load(event, sub, sub._cbs, target, meta.name) }, target)
},
_load: function(event, can, cb, target, name, value) { can.runAction(event, mdb.INPUTS, [name, value||target.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)
}) },
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) {
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.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)
} },
}})

View File

@ -167,12 +167,10 @@ var chat = {
"/plugin/local/wiki/word.js",
"/plugin/local/team/plan.js",
"/plugin/local/mall/goods.js",
],
], PLUGIN_INPUT: "/plugin/input/", PLUGIN_STORY: "/plugin/story/", PLUGIN_LOCAL: "/plugin/local/",
PLUGIN_STATE_JS: "/plugin/state.js", PLUGIN_INPUT_JS: "/plugin/input.js", PLUGIN_TABLE_JS: "/plugin/table.js",
ONENGINE: "onengine", ONDAEMON: "ondaemon", ONAPPEND: "onappend", ONLAYOUT: "onlayout", ONMOTION: "onmotion", ONKEYMAP: "onkeymap",
ONIMPORT: "onimport", ONSYNTAX: "onsyntax", ONFIGURE: "onfigure", ONACTION: "onaction", ONDETAIL: "ondetail", ONEXPORT: "onexport", ONPLUGIN: "onplugin",
PLUGIN_INPUT: "/plugin/input/",
PLUGIN_STORY: "/plugin/story/",
ONMAIN: "onmain", ONLOGIN: "onlogin", ONSEARCH: "onsearch", ONREMOTE: "onremote",
ONSIZE: "onsize", ONTOAST: "ontoast", ONSHARE: "onshare", ONPRINT: "onprint",