mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 08:48:06 +08:00
opt can
This commit is contained in:
parent
3bc3e7aaa8
commit
7eb4b28e3d
104
frame.js
104
frame.js
@ -315,8 +315,16 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", list: [], _init: function(can, me
|
||||
var br = input.type == html.TEXTAREA? [{type: html.BR, style: {clear: html.BOTH}}]: []
|
||||
var title = can.Conf([ctx.FEATURE, chat.TITLE, item.name].join(ice.PT))||""; title && (input.title = title)
|
||||
return can.page.Append(can, target, ([{view: style||can.base.join([html.ITEM, item.type]), onkeydown: function(event) {
|
||||
item.type == html.TEXTAREA && event.key == lang.TAB && can.onkeymap.insertText(event.target, ice.TB)
|
||||
item.type == html.TEXT && can.onkeymap.input(event, can), can.onmotion.selectField(event, can)
|
||||
switch (item.type) {
|
||||
case html.TEXT:
|
||||
switch (event.key) { case lang.ENTER: can.onkeymap.prevent(event); break }
|
||||
can.onkeymap.input(event, can), can.onmotion.selectField(event, can)
|
||||
break
|
||||
case html.TEXTAREA:
|
||||
switch (event.key) { case lang.TAB: can.onkeymap.insertText(event.target, ice.TB); can.onkeymap.prevent(event); break }
|
||||
break
|
||||
}
|
||||
|
||||
}, list: [input]}]).concat(br))[item.name]
|
||||
},
|
||||
table: function(can, msg, cb, target, sort) { if (msg.Length() == 0) { return }
|
||||
@ -405,23 +413,15 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", list: [], _init: function(can, me
|
||||
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(["/plugin/input/"+input+html._JS], function(can) {
|
||||
var input = meta.action||mdb.KEY; input != ice.AUTO && can.require(["/plugin/input/"+input+".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) {
|
||||
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)
|
||||
sub._root = can._root
|
||||
can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT}, ["/plugin/input/"+input+".js"], function(sub) { sub.Conf(meta)
|
||||
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
|
||||
|
||||
can.onappend._action(sub, [cli.CLOSE, cli.CLEAR, cli.REFRESH], sub._action, kit.Dict(
|
||||
cli.REFRESH, function(event) { can.base.isFunc(cb) && cb(sub) },
|
||||
cli.CLEAR, function(event) { target.value = "" },
|
||||
cli.CLOSE, function(event) { sub.close() }
|
||||
)), can.onappend._status(sub, [mdb.TOTAL, mdb.INDEX])
|
||||
|
||||
can.page.style(sub, sub._target, meta.style), can.onmotion.hidden(can, sub._target)
|
||||
target._can = sub, sub.close = function() { can.page.Remove(can, sub._target), delete(target._can) }
|
||||
can.page.style(sub, sub._target, meta.style), can.onlayout.figure(event, sub), 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) })
|
||||
}, document.body)
|
||||
}, can._root._target)
|
||||
}, target, last) } })
|
||||
})
|
||||
},
|
||||
@ -711,21 +711,51 @@ Volcanos(chat.ONMOTION, {help: "动态特效", list: [], _init: function(can, ta
|
||||
},
|
||||
|
||||
selectField: function(event, can) {
|
||||
if (event.key == "Enter") { return can.run(event) }
|
||||
if (!event.ctrlKey || event.key < "0" || event.key > "9") { return }
|
||||
if (event.shiftKey) {
|
||||
return can.page.Select(can, can._option, "input[type=button]", function(item, index) {
|
||||
index == event.key && (item.click())
|
||||
})
|
||||
}
|
||||
if (event.key == "0") { return can.onimport._back(can) }
|
||||
|
||||
can.page.Select(can, can._output, html.TR, function(tr, index) { if (index == event.key) {
|
||||
var head = can.page.Select(can, can._output, html.TH, function(th, order) { return th.innerText })
|
||||
can.page.Select(can, tr, html.TD, function(td, index) { can.Option(head[index], td.innerText) })
|
||||
can.Update(event)
|
||||
} })
|
||||
},
|
||||
selectInputTable: function(event, can, cb, target) { if (target.value == "") { return cb() }
|
||||
switch (event.key) {
|
||||
case lang.SHIFT:
|
||||
case lang.CONTROL:
|
||||
return
|
||||
}
|
||||
|
||||
if (event.ctrlKey) {
|
||||
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 }
|
||||
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) {
|
||||
index == 0 && (target.value = td.innerText)
|
||||
}); return tr
|
||||
}).length
|
||||
}
|
||||
var total = select(target._index); switch (event.key) {
|
||||
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
|
||||
}
|
||||
return can.Status(mdb.INDEX, target._index), can.onkeymap.prevent(event)
|
||||
}
|
||||
|
||||
target._index = -1, target._value = target.value
|
||||
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) {
|
||||
has = has || td.innerText.indexOf(target.value)>-1
|
||||
}), can.page.ClassList.set(can, tr, html.HIDDEN, !has)
|
||||
})
|
||||
|
||||
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 }
|
||||
}).length; total == 0 && can.base.isFunc(cb) && cb()
|
||||
can.Status(kit.Dict(mdb.TOTAL, total, mdb.INDEX, target._index))
|
||||
},
|
||||
selectTable: function(event, can, target, cb) { if (!event.ctrlKey) { return }
|
||||
function select(order) { var index = 0
|
||||
return can.page.Select(can, can._output, html.TR, function(tr) {
|
||||
@ -740,36 +770,6 @@ Volcanos(chat.ONMOTION, {help: "动态特效", list: [], _init: function(can, ta
|
||||
default: target._index = 0; return
|
||||
} can.onkeymap.prevent(event)
|
||||
},
|
||||
selectTableInput: function(event, can, target, cb) { if (target.value == "") { return cb() }
|
||||
if (event.ctrlKey) {
|
||||
function select(order) {
|
||||
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 }
|
||||
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) {
|
||||
index == 0 && (target.value = td.innerText)
|
||||
}); return tr
|
||||
}).length
|
||||
}
|
||||
var total = select(target._index); switch (event.key) {
|
||||
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
|
||||
default: target._index = 0, target._value = ""; return
|
||||
} return can.onkeymap.prevent(event)
|
||||
}
|
||||
|
||||
target._index = -1, target._value = target.value
|
||||
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) {
|
||||
has = has || td.innerText.indexOf(target.value)>-1
|
||||
}), can.page.ClassList.set(can, tr, html.HIDDEN, !has)
|
||||
})
|
||||
|
||||
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 }
|
||||
}).length; total == 0 && can.base.isFunc(cb) && cb()
|
||||
can.Status(kit.Dict(mdb.TOTAL, total, mdb.INDEX, target._index))
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONKEYMAP, {help: "键盘交互", list: [], _focus: [], _init: function(can, target) {
|
||||
document.body.onclick = function(event) {
|
||||
|
@ -131,7 +131,10 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互", list: [], _focus: [], _init: func
|
||||
":": function(event, can, target) {
|
||||
can.onengine.signal(can, chat.ONCOMMANDFOCUS), can.onkeymap.prevent(event)
|
||||
},
|
||||
escape: function(event, can, target) {
|
||||
Enter: function(event, can, target) {
|
||||
can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: mdb.FOREACH, word: ""}))
|
||||
},
|
||||
Escape: function(event, can, target) {
|
||||
can.page.Select(can, can._root._target, can.page.Keys(html.FIELDSET_FLOAT, html.DIV_FLOAT), function(item) {
|
||||
can.page.Remove(can, item)
|
||||
})
|
||||
|
@ -77,7 +77,7 @@ Volcanos(chat.ONACTION, {help: "控件交互", list: [], _init: function(can, cb
|
||||
})
|
||||
},
|
||||
onsearch: function(can, msg, word) {
|
||||
if (word[0] == chat.STORM || word[1] != "") { can.onexport.storm(can, msg, word) }
|
||||
if (word[0] == chat.STORM) { can.onexport.storm(can, msg, word) }
|
||||
},
|
||||
onstorm_select: function(can, msg, river, storm) {
|
||||
if (can.user.isExtension) { localStorage.setItem(ctx.ARGS, JSON.stringify({river: river, storm: storm})) }
|
||||
|
@ -59,6 +59,21 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [cli.CLOSE, cli.CLEAR, cli.
|
||||
can.onappend._action(can, can.Conf(html.ACTION)||can.onaction.list)
|
||||
can.ui = can.page.Append(can, can._output, [
|
||||
{input: ["word", function(event) { can.onkeymap.input(event, can)
|
||||
if (event.ctrlKey) {
|
||||
if (event.key == "0") {
|
||||
can.onaction.clear(event, can)
|
||||
}
|
||||
if ("1" <= event.key && event.key <= "9") {
|
||||
can.page.Select(can, can.ui.content, [html.TBODY, html.TR], function(tr, index) {
|
||||
if (index+1 == event.key) {
|
||||
can.page.Select(can, tr, html.TD, function(td, index) {
|
||||
index == 0 && td.click()
|
||||
})
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
}
|
||||
if (event.key == lang.ESCAPE) { return can.onmotion.hide(can) }
|
||||
|
||||
if (event.key == lang.ENTER) { can.onkeymap.prevent(event)
|
||||
|
@ -3,25 +3,25 @@ Volcanos(chat.ONFIGURE, {help: "控件详情", list: [], date: {onclick: functio
|
||||
|
||||
// 添加控件
|
||||
var now = target.value? new Date(target.value): new Date()
|
||||
can._trans = {"today": "今天", "next": "下一月", "prev": "上一月"}
|
||||
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", "", "prev", ["year"].concat(can.core.List(now.getFullYear() - 10, now.getFullYear() + 10)),
|
||||
["month"].concat(can.core.List(1, 13)), "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)) },
|
||||
"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), 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) },
|
||||
|
||||
"随机": 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)
|
||||
|
@ -1,68 +1,32 @@
|
||||
Volcanos(chat.ONFIGURE, {help: "控件详情", list: [], key: {
|
||||
_init: function(can, msg, target) { var call = arguments.callee; target._msg = msg
|
||||
can.onmotion.clear(can), can.onappend.table(can, msg, function(value, key, index, line) {
|
||||
return {text: [value, html.TD], onclick: function(event) { target.value = line[key]
|
||||
if (msg.Option(ice.MSG_PROCESS) != ice.PROCESS_AGAIN) { return can.close() }
|
||||
target._hold = true
|
||||
can.run(event, [ctx.ACTION, mdb.INPUTS, can.Conf(mdb.NAME), target.value], function(msg) { call(can, msg, target) })
|
||||
}}
|
||||
}), can.Status(mdb.TOTAL, msg.Length()), can.onmotion.hidden(can, can._target, msg.Length() > 0)
|
||||
},
|
||||
_show: function(event, can, name, cbs, target, value) {
|
||||
_init: function(event, can, cbs, target, name, value) { var call = arguments.callee
|
||||
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.onmotion.clear(can), can.onappend.table(can, msg, function(value) {
|
||||
return {text: [value, html.TD], onclick: function(event) {
|
||||
target.value = value, can.onmotion.focus(can, target)
|
||||
if (msg.Option(ice.MSG_PROCESS) != ice.PROCESS_AGAIN) { return can.close() }
|
||||
target._hold = true, call(event, can, cbs, target, name, value)
|
||||
}}
|
||||
}), can.onappend._status(can, [mdb.TOTAL, mdb.INDEX]), can.Status(mdb.TOTAL, msg.Length())
|
||||
can.base.isFunc(cbs) && cbs(can, msg.Length() == 0)
|
||||
})
|
||||
},
|
||||
onclick: function(event, can, meta, cb, target) {
|
||||
if (target._figure) {
|
||||
target._figure = can.onlayout.figure(event, can, can.core.Value(target, "_can._target")||{})
|
||||
return
|
||||
onclick: function(event, can, meta, cb, target) { can.onmotion.focus(can, target)
|
||||
cb(function(sub, cbs) { can.onfigure.key._init(event, sub, cbs, target, meta.name) })
|
||||
},
|
||||
onkeydown: function(event, can, meta, cb, target, last) {
|
||||
switch (event.key) {
|
||||
case "n":
|
||||
case "p": event.ctrlKey && can.onkeymap.prevent(event); break
|
||||
default: can.base.isFunc(last) && last(event, can)
|
||||
}
|
||||
|
||||
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)
|
||||
sub && can.onmotion.selectInputTable(event, sub, function() {
|
||||
can.onfigure.key._init(event, sub, null, target, meta.name)
|
||||
}, target), can.base.isFunc(last) && last(event, 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) {
|
||||
case lang.SHIFT: break
|
||||
case lang.CONTROL: break
|
||||
case lang.ENTER:
|
||||
if (event.ctrlKey && can.page.tagis(html.TEXTAREA, target)) {
|
||||
can.base.isFunc(last) && last(event, can)
|
||||
}
|
||||
sub && sub.close(); break
|
||||
case lang.ESCAPE: event.target.blur(); break
|
||||
case lang.PS: can.onfigure.key._show(event, sub, meta.name, null, target, target.value+ice.PS); break
|
||||
case lang.TAB:
|
||||
if (can.page.tagis(html.TEXTAREA, target)) {
|
||||
can.onkeymap.insertText(event.target, ice.TB), can.onkeymap.prevent(event)
|
||||
break
|
||||
}
|
||||
default:
|
||||
// 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)
|
||||
}
|
||||
onblur: function(event, can, meta, cb, target) {
|
||||
target._hold || can.onmotion.delay(can, function() { target._can && target._can.close() }), target._hold = false
|
||||
},
|
||||
// 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)
|
||||
// }) },
|
||||
}})
|
||||
|
@ -17,7 +17,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, args, cb) {
|
||||
if (event.key == lang.ESCAPE) { event.target.blur() }
|
||||
}},
|
||||
{type: html.TEXT, name: "filter", value: "", onkeydown: function(event, can) {
|
||||
can.onmotion.selectTableInput(event, can.sup, event.target)
|
||||
can.onmotion.selectInputTable(event, can.sup, null, event.target)
|
||||
if (event.key == lang.ENTER) { can.sup.Update(event, [ctx.ACTION, event.ctrlKey? nfs.GREP: nfs.TAGS, can.sup.Option("word")]) }
|
||||
if (event.key == lang.ESCAPE) { event.target.blur() }
|
||||
}},
|
||||
|
Loading…
x
Reference in New Issue
Block a user