mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 08:48:06 +08:00
opt vimer.js
This commit is contained in:
parent
fd95a53b92
commit
e2c81e458b
162
frame.js
162
frame.js
@ -338,7 +338,9 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
||||
var input = can.page.input(can, item, value)
|
||||
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]), list: [input]}]).concat(br))[item.name]
|
||||
return can.page.Append(can, target, ([{view: style||can.base.join([html.ITEM, item.type]), onkeydown: function(event) {
|
||||
item.type == "text" && can.onkeymap.input(event, can)
|
||||
}, list: [input]}]).concat(br))[item.name]
|
||||
},
|
||||
table: function(can, msg, cb, target, sort) {
|
||||
var table = can.page.AppendTable(can, msg, target||can._output, msg.append, cb||function(value, key, index, line, array) {
|
||||
@ -650,6 +652,9 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe
|
||||
if (pos) { item.scrollTo(0, pos-1); return item }
|
||||
}).length > 0
|
||||
},
|
||||
delay: function(can, cb) {
|
||||
can.core.Timer(10, cb)
|
||||
},
|
||||
|
||||
hidden: function(can, target, show) {
|
||||
can.page.Modify(can, target||can._target, {style: {display: show? "": html.NONE}})
|
||||
@ -806,9 +811,9 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe
|
||||
var total = select(target._index)
|
||||
select(target._index = (target._index-1) < 0? total-1: (target._index-1))
|
||||
break
|
||||
default: target._index = 0, target._value = ""
|
||||
default: target._index = 0, target._value = ""; return
|
||||
}
|
||||
return
|
||||
return can.onkeymap.prevent(event)
|
||||
}
|
||||
|
||||
target._index = 0, target._value = ""
|
||||
@ -826,140 +831,95 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe
|
||||
},
|
||||
})
|
||||
Volcanos("onkeymap", {help: "键盘交互", list: [], _focus: [], _init: function(can, target) {
|
||||
document.body.onkeydown = function(event) { var msg = can.request(event)
|
||||
msg.Option("model", "normal"); if (event.target.tagName == "SELECT" || event.target.tagName == "INPUT" || event.target.tagName == "TEXTAREA") {
|
||||
msg.Option("model", event.ctrlKey? "insert_ctrl": "insert")
|
||||
return
|
||||
}
|
||||
if (event.metaKey) { return }
|
||||
if (msg.Option(ice.MSG_HANDLE) == ice.TRUE) { return }
|
||||
can.onengine.signal(can, "onkeydown", msg)
|
||||
if (msg.Option(ice.MSG_HANDLE) == ice.TRUE) { return }
|
||||
can._keylist = can.onkeymap._parse(event, can, msg.Option("model"), can._keylist||[], can._output)
|
||||
can.onkeymap._build(can), document.body.onkeydown = function(event) { if (event.metaKey) { return }
|
||||
if (event.target.tagName == "SELECT" || event.target.tagName == "INPUT" || event.target.tagName == "TEXTAREA") { return }
|
||||
var msg = can.request(event, {"model": "normal"}); if (msg.Option(ice.MSG_HANDLE) == ice.TRUE) { return }
|
||||
can.onengine.signal(can, "onkeydown", msg); if (msg.Option(ice.MSG_HANDLE) == ice.TRUE) { return }
|
||||
can._keylist = can.onkeymap._parse(event, can, msg.Option("model"), can._keylist, can._output)
|
||||
}
|
||||
},
|
||||
_build: function(can) {
|
||||
can.core.Item(can.onkeymap._mode, function(item, value) { var engine = {}
|
||||
can.core.Item(can.onkeymap._mode, function(item, value) { var engine = {list: {}}
|
||||
can.core.Item(value, function(key, cb) { var map = engine
|
||||
for (var i = key.length-1; i > -1; i--) {
|
||||
map = map[key[i]] = i == 0? cb: (map[key[i]]||{})
|
||||
for (var i = 0; i < key.length; i++) {
|
||||
if (!map.list[key[i]]) { map.list[key[i]] = {list: {}} }
|
||||
map = map.list[key[i]]; if (i == key.length-1) { map.cb = cb }
|
||||
}
|
||||
}), can.onkeymap._engine[item] = engine
|
||||
})
|
||||
},
|
||||
_parse: function(event, can, mode, list, target) { list = list||[], list.push(event.key)
|
||||
for (var pre = 0; pre < list.length; pre++) {
|
||||
_parse: function(event, can, mode, list, target) { list = list||[]
|
||||
if (["Control", "Shift"].indexOf(event.key) > -1) { return list }
|
||||
list.push(event.key); for (var pre = 0; pre < list.length; pre++) {
|
||||
if ("0" <= list[pre] && list[pre] <= "9") { continue } break
|
||||
}; var count = parseInt(list.slice(0, pre).join(""))||1
|
||||
|
||||
function repeat(cb, count) { list = []
|
||||
for (var i = 1; i <= count; i++) { if (cb(event, can, target, count)) { break } }
|
||||
// can.onkeymap.prevent(event)
|
||||
}
|
||||
|
||||
var map = can.onkeymap._mode[mode]
|
||||
var cb = map && map[event.key.toLowerCase()]; if (can.base.isFunc(cb) && event.key.length > 1) {
|
||||
repeat(cb, count); return list
|
||||
}
|
||||
var map = can.onkeymap._mode[mode]
|
||||
var cb = map && map[event.key]; if (can.base.isFunc(cb) && event.key.length > 1) {
|
||||
repeat(cb, count); return list
|
||||
}
|
||||
function repeat(cb, count) { list = []; for (var i = 1; i <= count; i++) { if (cb(event, can, target, count)) { break } } }
|
||||
var cb = map && map[event.key]; if (can.base.isFunc(cb) && event.key.length > 1) { repeat(cb, count); return list }
|
||||
var cb = map && map[event.key.toLowerCase()]; if (can.base.isFunc(cb) && event.key.length > 1) { repeat(cb, count); return list }
|
||||
|
||||
|
||||
var map = can.onkeymap._engine[mode]||{}; for (var i = list.length-1; i > pre-1; i--) {
|
||||
var cb = map[list[i]]||{}; switch (typeof cb) {
|
||||
case lang.FUNCTION: repeat(cb, count); return list
|
||||
case lang.OBJECT: map = cb; continue
|
||||
case lang.STRING:
|
||||
default: return list
|
||||
}
|
||||
can.misc.Log("keys", count, list)
|
||||
var map = can.onkeymap._engine[mode]; if (!map) { return [] }
|
||||
for (var i = pre; i < list.length; i++ ) {
|
||||
var map = map.list[list[i]]; if (!map) { return [] }
|
||||
if (i == list.length-1 && can.base.isFunc(map.cb)) { repeat(map.cb, count); return [] }
|
||||
}
|
||||
return list
|
||||
},
|
||||
_mode: {
|
||||
insert: {
|
||||
escape: function(event, can, target) {
|
||||
target.blur()
|
||||
},
|
||||
jk: function(event, can, target) {
|
||||
can.onkeymap.DelText(target, target.selectionStart-1, target.selectionStart)
|
||||
target.blur()
|
||||
},
|
||||
enter: function(event, can, target) {
|
||||
var his = target._history || []
|
||||
his.push(target.value)
|
||||
if (event.target.tagName == "INPUT") {
|
||||
can.onmotion.focus(can, target)
|
||||
}
|
||||
|
||||
target._current = his.length
|
||||
target._history = his
|
||||
jk: function(event, can, target) { target.blur(), can.onkeymap.deleteText(target, target.selectionStart-1, target.selectionStart) },
|
||||
Escape: function(event, can, target) { target.blur() },
|
||||
Enter: function(event, can, target) {
|
||||
var his = target._history||[]; his.push(target.value)
|
||||
event.target.tagName == "INPUT" && can.onmotion.focus(can, target)
|
||||
target._history = his, target._current = his.length
|
||||
},
|
||||
},
|
||||
insert_ctrl: {
|
||||
p: function(event, can, target) {
|
||||
var his = target._history||[]
|
||||
var pos = target._current||0
|
||||
|
||||
pos = --pos % (his.length+1)
|
||||
if (pos < 0) { pos = his.length}
|
||||
target.value = his[pos]||""
|
||||
can.misc.Log(pos, his)
|
||||
|
||||
target._current = pos
|
||||
var his = target._history||[], pos = target._current||0
|
||||
pos = --pos % (his.length+1); if (pos < 0) { pos = his.length }
|
||||
target._current = pos, target.value = his[pos]||""
|
||||
},
|
||||
n: function(event, can, target) {
|
||||
var his = target._history||[]
|
||||
var pos = target._current||0
|
||||
|
||||
var his = target._history||[], pos = target._current||0
|
||||
pos = ++pos % (his.length+1)
|
||||
target.value = his[pos]||""
|
||||
can.misc.Log(pos, his)
|
||||
|
||||
target._current = pos
|
||||
target._current = pos, target.value = his[pos]||""
|
||||
},
|
||||
|
||||
u: function(event, can, target) {
|
||||
can.onkeymap.DelText(target, 0, target.selectionEnd)
|
||||
},
|
||||
k: function(event, can, target) {
|
||||
can.onkeymap.DelText(target, target.selectionStart)
|
||||
},
|
||||
h: function(event, can, target) {
|
||||
can.onkeymap.DelText(target, target.selectionStart-1, target.selectionStart)
|
||||
},
|
||||
d: function(event, can, target) {
|
||||
can.onkeymap.DelText(target, 0, target.selectionStart)
|
||||
},
|
||||
w: function(event, can, target) {
|
||||
var start = target.selectionStart-2
|
||||
var end = target.selectionEnd-1
|
||||
u: function(event, can, target) { can.onkeymap.deleteText(target, 0, target.selectionEnd) },
|
||||
k: function(event, can, target) { can.onkeymap.deleteText(target, target.selectionStart) },
|
||||
h: function(event, can, target) { can.onkeymap.deleteText(target, target.selectionStart-1, 1) },
|
||||
d: function(event, can, target) { can.onkeymap.deleteText(target, 0, target.selectionStart) },
|
||||
w: function(event, can, target) { var start = target.selectionStart-2, end = target.selectionEnd-1
|
||||
for (var i = start; i >= 0; i--) {
|
||||
if (target.value[end] == " " && target.value[i] != " ") {
|
||||
break
|
||||
}
|
||||
if (target.value[end] != " " && target.value[i] == " ") {
|
||||
break
|
||||
}
|
||||
}
|
||||
can.onkeymap.DelText(target, i+1, end-i)
|
||||
if (target.value[end] == ice.SP && target.value[i] != ice.SP) { break }
|
||||
if (target.value[end] != ice.SP && target.value[i] == ice.SP) { break }
|
||||
} can.onkeymap.deleteText(target, i+1, end-i)
|
||||
},
|
||||
},
|
||||
}, _engine: {},
|
||||
|
||||
input: function(event, can) { var target = event.target
|
||||
target._keys = can.onkeymap._parse(event, can, event.ctrlKey? "insert_ctrl": mdb.INSERT, target._keys||[], target)
|
||||
if (target._keys.length == 0 && target.tagName == "INPUT") { can.onkeymap.prevent(event) }
|
||||
input: function(event, can) { if (event.metakey) { return } var target = event.target
|
||||
target._keys = can.onkeymap._parse(event, can, event.ctrlKey? "insert_ctrl": mdb.INSERT, target._keys, target)
|
||||
},
|
||||
DelText: function(target, start, count) { var end = count? start+count: target.value.length
|
||||
prevent: function(event) { event.stopPropagation(), event.preventDefault() },
|
||||
deleteText: function(target, start, count) { var end = count? start+count: target.value.length
|
||||
var cut = target.value.slice(start, end)
|
||||
target.value = target.value.substring(0, start)+target.value.substring(end, target.value.length)
|
||||
target.setSelectionRange(start, start)
|
||||
return cut
|
||||
return target.setSelectionRange(start, start), cut
|
||||
},
|
||||
insertText: function(target, text) { var start = target.selectionStart
|
||||
var before = target.value.slice(0, target.selectionStart)
|
||||
var after = target.value.slice(target.selectionEnd)
|
||||
target.value = before+text+after
|
||||
return target.setSelectionRange(start+1, start+1)
|
||||
},
|
||||
cursorMove: function(can, target, count, begin) { begin != undefined && target.setSelectionRange(begin, begin)
|
||||
target.setSelectionRange(target.selectionStart+count, target.selectionStart+count)
|
||||
},
|
||||
prevent: function(event) {
|
||||
event.stopPropagation(), event.preventDefault()
|
||||
}
|
||||
})
|
||||
_can_name = ""
|
||||
|
@ -77,8 +77,11 @@ Volcanos("user", {help: "用户操作", agent: {
|
||||
"label": "标签", "exec": "执行",
|
||||
}[text]||text
|
||||
},
|
||||
toastProcess: function(can, title) {
|
||||
return can.user.toast(can, ice.PROCESS, title)
|
||||
},
|
||||
toastSuccess: function(can, title) {
|
||||
can.user.toast(can, ice.SUCCESS, title)
|
||||
return can.user.toast(can, ice.SUCCESS, title)
|
||||
},
|
||||
toast: function(can, content, title, duration, progress) {
|
||||
var meta = can.base.isObject(content)? content: {content: content, title: title||can._help, duration: duration, progress: progress}
|
||||
|
@ -15,7 +15,11 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg)
|
||||
},
|
||||
_plugin: function(can, river, storm, sub, meta) { sub._target._meta = meta
|
||||
sub.run = function(event, cmds, cb) { var msg = sub.request(event)
|
||||
return can.run(event, can.misc.concat(can, [river, storm, meta.id||meta.index], cmds), cb)
|
||||
if (msg.Option("_toast")) { var toast = can.user.toast(can, msg.Option("_toast"), "", -1) }
|
||||
return can.run(event, can.misc.concat(can, [river, storm, meta.id||meta.index], cmds), function(msg) {
|
||||
toast && toast.close(), can.base.isFunc(cb) && cb(msg)
|
||||
})
|
||||
|
||||
}, can._plugins = can.misc.concat(can, can._plugins, [sub])
|
||||
|
||||
meta.id && (sub._option.dataset = sub._option.dataset||{}, sub._option.dataset.id = meta.id)
|
||||
|
@ -21,6 +21,7 @@ Volcanos("onfigure", {help: "控件详情", list: [], key: {
|
||||
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(can, meta, cbs, target)
|
||||
can.onmotion.focus(can, target)
|
||||
}) },
|
||||
onblur: function(event, can, meta, cb, target) { delete(target._figure), target._can && target._can.close() },
|
||||
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) {
|
||||
@ -37,10 +38,6 @@ Volcanos("onfigure", {help: "控件详情", list: [], key: {
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
if (event.ctrlKey && ["n", "p"].indexOf(event.key) > -1) {
|
||||
return can.onkeymap.prevent(event)
|
||||
}
|
||||
switch (event.key) { case lang.ESCAPE: event.target.blur(); return }
|
||||
can.base.isFunc(last) && last(event, can)
|
||||
},
|
||||
|
@ -87,7 +87,7 @@ fieldset.inner>div.output div.profile>div.output {
|
||||
clear:both; overflow:auto;
|
||||
}
|
||||
fieldset.inner>div.output div.display>div.output {
|
||||
clear:both;
|
||||
clear:both; overflow:auto;
|
||||
}
|
||||
fieldset.inner>div.output div.display {
|
||||
border:solid 1px greenyellow;
|
||||
|
@ -11,7 +11,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
|
||||
can.onimport.tabview(can, can.Option(nfs.PATH), can.Option(nfs.FILE), can.Option(nfs.LINE))
|
||||
can.onimport.project(can, can.Option(nfs.PATH), function() {
|
||||
can.onimport._toolkit(can, can.ui.toolkit), can.onimport._session(can, msg), can.onimport._keydown(can)
|
||||
can.core.Timer(10, function() {
|
||||
can.onmotion.delay(can, function() {
|
||||
can.onmotion.toggle(can, can.ui.project), can.onimport.layout(can)
|
||||
can.onmotion.toggle(can, can.ui.project), can.onimport.layout(can)
|
||||
})
|
||||
@ -27,7 +27,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
|
||||
cli.CLEAR, function(event) { can.onmotion.clear(can, ui.output) },
|
||||
cli.CLOSE, function(event) { can.onmotion.hidden(can, target), can.onimport.layout(can) },
|
||||
mdb.PLUGIN, function(event) {
|
||||
can.user.input(event, can, [ctx.INDEX], function(event, button, data, list, args) {
|
||||
can.user.input(event, can, [ctx.INDEX], function(event, button, data) {
|
||||
can.onimport.plugin(can, data, ui.output)
|
||||
})
|
||||
},
|
||||
@ -35,13 +35,13 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
|
||||
target._toggle = function(event, show) { action[show? cli.SHOW: cli.CLOSE](event) }
|
||||
},
|
||||
_display: function(can, target) {
|
||||
var ui = can.page.Append(can, target, [{view: html.ACTION}, {view: html.OUTPUT}]); can.ui.display_output = ui.output
|
||||
var ui = can.page.Append(can, target, [{view: html.ACTION}, {view: html.OUTPUT}, {}]); can.ui.display_output = ui.output
|
||||
var action = can.onappend._action(can, [cli.EXEC, cli.CLEAR, mdb.PLUGIN, cli.CLOSE], ui.action, kit.Dict(
|
||||
cli.EXEC, function(event) { can.onaction["执行"](event, can) },
|
||||
cli.CLEAR, function(event) { can.onmotion.clear(can, ui.output) },
|
||||
cli.CLOSE, function(event) { can.onmotion.hidden(can, target), can.onimport.layout(can) },
|
||||
mdb.PLUGIN, function(event) {
|
||||
can.user.input(event, can, [ctx.INDEX], function(event, button, data, list, args) {
|
||||
can.user.input(event, can, [ctx.INDEX], function(event, button, data) {
|
||||
can.onimport.plugin(can, data, ui.output)
|
||||
})
|
||||
},
|
||||
@ -58,7 +58,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
|
||||
}) }) },
|
||||
_keydown: function(can) { can.onkeymap._build(can)
|
||||
can.user.mod.isCmd && can.onengine.listen(can, chat.ONKEYDOWN, function(event) {
|
||||
can._key_list = can.onkeymap._parse(event, can, "command", can._key_list, can.ui.content)
|
||||
can._key_list = can.onkeymap._parse(event, can, "plugin", can._key_list, can.ui.content)
|
||||
})
|
||||
},
|
||||
|
||||
@ -168,7 +168,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
|
||||
profile_display: can.ui.profile.style.display, display_display: can.ui.display.style.display,
|
||||
})
|
||||
can.file = can.base.Path(msg.Option(nfs.PATH), msg.Option(nfs.FILE))
|
||||
can.parse = can.base.Ext(can.file), can.Status("模式", "command")
|
||||
can.parse = can.base.Ext(can.file), can.Status("模式", "plugin")
|
||||
|
||||
var p = cache_data[can.file]; p && (can.current = p.current, can.max = p.max)
|
||||
can.page.Modify(can, can.ui.profile, {style: {display: p? p.profile_display: html.NONE}})
|
||||
@ -184,7 +184,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
|
||||
|
||||
if (msg.Option(ctx.INDEX)) {
|
||||
can.onimport.plugin(can, {index: msg.Option(ctx.INDEX)}, can.ui.content, function(sub) {
|
||||
can.core.Timer(10, function() {
|
||||
can.onmotion.delay(can, function() {
|
||||
can.onmotion.focus(can, can.page.Select(can, can.ui.content, html.OPTION_ARGS)[0])
|
||||
}), can.base.isFunc(cb) && cb()
|
||||
})
|
||||
@ -231,9 +231,12 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
|
||||
})
|
||||
Volcanos("onkeymap", {help: "导入数据", _init: function(can, msg, cb, target) {
|
||||
},
|
||||
_plugin: function(event, can) {},
|
||||
_normal: function(event, can) {},
|
||||
_insert: function(event, can) {},
|
||||
_mode: {
|
||||
command: {
|
||||
escape: function(event, can) { can.onaction["清屏"](event, can) },
|
||||
plugin: {
|
||||
Escape: function(event, can) { can.onaction["清屏"](event, can) },
|
||||
g: function(event, can) { can.onaction["搜索"](event, can) },
|
||||
f: function(event, can) { can.onaction["打开"](event, can) },
|
||||
t: function(event, can) { can.onaction["添加"](event, can) },
|
||||
@ -251,34 +254,35 @@ Volcanos("onkeymap", {help: "导入数据", _init: function(can, msg, cb, target
|
||||
K: function(event, can) { can.onaction.scrollLine(can, -20) },
|
||||
|
||||
i: function(event, can) { can.onkeymap._insert(event, can) },
|
||||
n: function(event, can) { can.onkeymap._normal(can) },
|
||||
n: function(event, can) { can.onkeymap._normal(event, can) },
|
||||
":": function(event, can) { can.onimport.toolkit(can, {index: "cli.system"}, function(sub) { can.toolkit["cli.system"] = sub.select() }) },
|
||||
},
|
||||
}, _engine: {},
|
||||
})
|
||||
Volcanos("onaction", {help: "控件交互", list: ["搜索", "打开", "添加", "插件", "扩展", "保存"],
|
||||
Volcanos("onaction", {help: "控件交互", list: ["搜索", "打开", "添加", "插件", "扩展"],
|
||||
"搜索": function(event, can) {
|
||||
can.user.input(event, can, [mdb.NAME, [ctx.ACTION, nfs.TAGS, nfs.GREP, cli.MAKE]], function(event, button, data, list, args) {
|
||||
can.user.input(event, can, [mdb.NAME, [ctx.ACTION, nfs.TAGS, nfs.GREP, cli.MAKE]], function(event, button, data) {
|
||||
can.ui.search.Update({}, [ctx.ACTION, data.action, data.name])
|
||||
})
|
||||
},
|
||||
"打开": function(event, can) {
|
||||
can.user.input(event, can, [nfs.FILE], function(event, button, data, list, args) {
|
||||
can.user.input(event, can, [nfs.FILE], function(event, button, data) {
|
||||
can.onimport.tabview(can, can.Option(nfs.PATH), data.file)
|
||||
})
|
||||
},
|
||||
"添加": function(event, can) {
|
||||
can.user.input(event, can, [ctx.INDEX], function(event, button, data, list, args) {
|
||||
can.user.input(event, can, [ctx.INDEX], function(event, button, data) {
|
||||
can.onimport.tabview(can, can.Option(nfs.PATH), data.index, ctx.INDEX)
|
||||
})
|
||||
},
|
||||
"插件": function(event, can) {
|
||||
can.user.input(event, can, [ctx.INDEX], function(event, button, data, list, args) {
|
||||
can.user.input(event, can, [ctx.INDEX], function(event, button, data) {
|
||||
var sub = can.toolkit[data.index]; if (sub) { sub.select(); return }
|
||||
can.onimport.toolkit(can, data, function(sub) { can.toolkit[data.index] = sub.select() })
|
||||
})
|
||||
},
|
||||
"扩展": function(event, can) {
|
||||
can.user.input(event, can, ["url"], function(event, button, data, list, args) {
|
||||
can.user.input(event, can, ["url"], function(event, button, data) {
|
||||
var sub = can.extentions[data.url]; if (sub) { sub.select(); return }
|
||||
can.onimport.exts(can, data.url, function(sub) { can.extentions[data.url] = sub.select() })
|
||||
})
|
||||
@ -292,6 +296,7 @@ Volcanos("onaction", {help: "控件交互", list: ["搜索", "打开", "添加",
|
||||
}, true)
|
||||
},
|
||||
"执行": function(event, can) { can.onimport.display(can)
|
||||
can.request(event, {_toast: "执行中..."})
|
||||
can.run(event, [ctx.ACTION, mdb.ENGINE, can.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) {
|
||||
can.onimport.display(can, msg)
|
||||
}, true)
|
||||
@ -312,6 +317,8 @@ Volcanos("onaction", {help: "控件交互", list: ["搜索", "打开", "添加",
|
||||
can.onmotion.hidden(can, can.ui.profile)
|
||||
} else if (can.ui.display.style.display == "") {
|
||||
can.onmotion.hidden(can, can.ui.display)
|
||||
} else if (can.ui.project.style.display == "") {
|
||||
can.onmotion.hidden(can, can.ui.project)
|
||||
} else {
|
||||
can.onaction["全屏"](event, can)
|
||||
}
|
||||
@ -366,10 +373,10 @@ Volcanos("onaction", {help: "控件交互", list: ["搜索", "打开", "添加",
|
||||
|
||||
can.base.isObject(line) && can.page.Select(can, line, "td.text", function(item) {
|
||||
can.current = {
|
||||
window: function() { return can.ui.content.offsetHeight/can.current.line.offsetHeight },
|
||||
scroll: function(count) { if (count) { can.ui.content.scrollTop += count*can.current.line.offsetHeight }
|
||||
return (can.current.line.offsetTop-can.ui.content.scrollTop)/can.current.line.offsetHeight
|
||||
},
|
||||
window: function() { return can.ui.content.offsetHeight/can.current.line.offsetHeight },
|
||||
|
||||
prev: function() { return line.previousSibling },
|
||||
next: function() { return line.nextSibling },
|
||||
@ -394,15 +401,14 @@ Volcanos("onaction", {help: "控件交互", list: ["搜索", "打开", "添加",
|
||||
can.onaction._selectLine(event, can)
|
||||
})
|
||||
},
|
||||
_selectLine: function(event, can) {
|
||||
},
|
||||
_selectLine: function(event, can) { },
|
||||
searchLine: function(event, can, value) { if (!can.ui.search) { return }
|
||||
can.ui.search.Update(event, [ctx.ACTION, nfs.TAGS, value.trim()])
|
||||
},
|
||||
favorLine: function(can, value) {
|
||||
can.user.input(event, can, [{name: "zone", value: "hi"}, {name: "name", value: "hello"}], function(event, button, meta, list) {
|
||||
can.run(event, [ctx.ACTION, code.FAVOR, ctx.ACTION, mdb.INSERT, mdb.ZONE, meta.zone||"",
|
||||
mdb.TYPE, can.parse, mdb.NAME, meta.name||"", mdb.TEXT, (value||"").trimRight(),
|
||||
can.user.input(event, can, [{name: "zone", value: "hi"}, {name: "name", value: "hello"}], function(event, button, data) {
|
||||
can.run(event, [ctx.ACTION, code.FAVOR, ctx.ACTION, mdb.INSERT, mdb.ZONE, data.zone||"",
|
||||
mdb.TYPE, can.parse, mdb.NAME, data.name||"", mdb.TEXT, (value||"").trimRight(),
|
||||
nfs.PATH, can.Option(nfs.PATH), nfs.FILE, can.Option(nfs.FILE), nfs.LINE, can.Option(nfs.LINE),
|
||||
], function(msg) { can.user.toastSuccess(can) }, true)
|
||||
})
|
||||
|
@ -1,14 +1,14 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, cb, target) {
|
||||
can.require(["inner.js"], function(can) { can.onimport.inner_init(can, msg, function() {
|
||||
can.onkeymap._build(can), can.onimport._input(can), can.onkeymap._command(can), can.base.isFunc(cb) && cb(msg)
|
||||
}, target) }, function(can, name, sub) {
|
||||
name == chat.ONIMPORT && (can.onimport.inner_init = sub._init)
|
||||
can.onkeymap._build(can), can.onimport._input(can), can.onkeymap._plugin({}, can), can.base.isFunc(cb) && cb(msg)
|
||||
}, target) }, function(can, name, sub) { name == chat.ONIMPORT && (can.onimport.inner_init = sub._init)
|
||||
name == chat.ONKEYMAP && (can.base.Copy(can.onkeymap._mode, sub._mode))
|
||||
})
|
||||
},
|
||||
_input: function(can) {
|
||||
can.ui.current = can.page.Append(can, can.ui.content.parentNode, [
|
||||
{view: ["current", html.INPUT], onkeydown: function(event) { if (event.metaKey) { return }
|
||||
can.misc.Debug("key", event.key)
|
||||
can._keylist = can.onkeymap._parse(event, can, can.mode, can._keylist, can.ui.current)
|
||||
can.mode == "insert" && can.core.Timer(10, function() { can.current.text(can.ui.current.value) })
|
||||
can.mode == "normal" && can.Status("按键", can._keylist.join(""))
|
||||
@ -19,13 +19,12 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
}, [""])
|
||||
Volcanos("onkeymap", {help: "键盘交互", list: [],
|
||||
_model: function(can, value) { can.Status("模式", can.mode = value)
|
||||
can.current && (can.ui.current.value = can.current.text())
|
||||
return can.page.Modify(can, can.ui.current, {className: "current"+ice.SP+can.mode}), value
|
||||
},
|
||||
_command: function(can) { can.onkeymap._model(can, "command")
|
||||
_plugin: function(event, can) { can.onkeymap._model(can, "plugin")
|
||||
can.ui.current.blur()
|
||||
},
|
||||
_normal: function(can) { can.onkeymap._model(can, "normal")
|
||||
_normal: function(event, can) { can.onkeymap._model(can, "normal")
|
||||
can.ui.current.focus(), can.ui.content.scrollLeft -= 10000
|
||||
},
|
||||
_insert: function(event, can) { can.onkeymap._model(can, "insert")
|
||||
@ -35,61 +34,56 @@ Volcanos("onkeymap", {help: "键盘交互", list: [],
|
||||
|
||||
_mode: {
|
||||
normal: {
|
||||
escape: function(event, can) { can.onkeymap._command(can) },
|
||||
escape: function(event, can) { can.onkeymap._plugin(event, can) },
|
||||
ArrowLeft: function(event, can, target) { can.onkeymap.cursorMove(can, target, -1) },
|
||||
ArrowRight: function(event, can, target) { can.onkeymap.cursorMove(can, target, 1) },
|
||||
ArrowDown: function(event, can) { can.onaction.selectLine(event, can, can.current.next()) },
|
||||
ArrowUp: function(event, can) { can.onaction.selectLine(event, can, can.current.prev()) },
|
||||
|
||||
H: function(event, can, target) { can.onaction.cursorMove(can, target, 0, 0) },
|
||||
h: function(event, can, target) { can.onaction.cursorMove(can, target, -1) },
|
||||
l: function(event, can, target) { can.onaction.cursorMove(can, target, 1) },
|
||||
L: function(event, can, target) { can.onaction.cursorMove(can, target, 0, -1) },
|
||||
H: function(event, can, target) { can.onkeymap.cursorMove(can, target, 0, 0) },
|
||||
h: function(event, can, target) { can.onkeymap.cursorMove(can, target, -1) },
|
||||
l: function(event, can, target) { can.onkeymap.cursorMove(can, target, 1) },
|
||||
L: function(event, can, target) { can.onkeymap.cursorMove(can, target, 0, -1) },
|
||||
j: function(event, can) { can.onaction.selectLine(event, can, can.current.next()) },
|
||||
k: function(event, can) { can.onaction.selectLine(event, can, can.current.prev()) },
|
||||
|
||||
gg: function(event, can, target, count) { return can.onaction.selectLine(event, can, count||1), true },
|
||||
gg: function(event, can, target, count) { return can.onaction.selectLine(event, can, count), true },
|
||||
G: function(event, can, target, count) { return can.onaction.selectLine(event, can, count = count>1? count: can.max), true },
|
||||
|
||||
zt: function(event, can, target, count) {
|
||||
return can.current.scroll(can.current.scroll()-(count>1? count: 3)), true
|
||||
},
|
||||
zz: function(event, can, target, count) {
|
||||
return can.current.scroll(can.current.scroll()-(count = count>1? count: can.current.window()/2)), true
|
||||
},
|
||||
zb: function(event, can, target, count) {
|
||||
return can.current.scroll(can.current.scroll()-can.current.window()+(count>1? count: 5)), true
|
||||
},
|
||||
zt: function(event, can, target, count) { return can.current.scroll(can.current.scroll()-(count>1? count: 3)), true },
|
||||
zz: function(event, can, target, count) { return can.current.scroll(can.current.scroll()-(count = count>1? count: can.current.window()/2)), true },
|
||||
zb: function(event, can, target, count) { return can.current.scroll(can.current.scroll()-can.current.window()+(count>1? count: 5)), true },
|
||||
|
||||
i: function(event, can) { can.onkeymap._insert(event, can) },
|
||||
I: function(event, can, target) { can.onkeymap._insert(event, can)
|
||||
can.onaction.cursorMove(can, target, 0, 0)
|
||||
},
|
||||
a: function(event, can, target) { can.onkeymap._insert(event, can)
|
||||
can.onaction.cursorMove(can, target, 1)
|
||||
},
|
||||
A: function(event, can, target) { can.onkeymap._insert(event, can)
|
||||
can.onaction.cursorMove(can, target, 0, -1)
|
||||
},
|
||||
o: function(event, can) { can.onkeymap._insert(event, can)
|
||||
can.onaction.selectLine(event, can, can.onaction.insertLine(can, "", can.current.next()))
|
||||
},
|
||||
O: function(event, can) { can.onkeymap._insert(event, can)
|
||||
can.onaction.selectLine(event, can, can.onaction.insertLine(can, "", can.current.line))
|
||||
},
|
||||
I: function(event, can, target) { can.onkeymap._insert(event, can), can.onkeymap.cursorMove(can, target, 0, 0) },
|
||||
a: function(event, can, target) { can.onkeymap._insert(event, can), can.onkeymap.cursorMove(can, target, 1) },
|
||||
A: function(event, can, target) { can.onkeymap._insert(event, can), can.onkeymap.cursorMove(can, target, 0, -1) },
|
||||
o: function(event, can) { can.onkeymap._insert(event, can), can.onaction.selectLine(event, can, can.onaction.insertLine(can, "", can.current.next())) },
|
||||
O: function(event, can) { can.onkeymap._insert(event, can), can.onaction.selectLine(event, can, can.onaction.insertLine(can, "", can.current.line)) },
|
||||
|
||||
yy: function(event, can) { can._last_text = can.current.text() },
|
||||
dd: function(event, can) { can._last_text = can.current.text()
|
||||
var next = can.current.next(); can.onaction.deleteLine(can, can.current.line)
|
||||
can.onaction.selectLine(event, can, next)
|
||||
},
|
||||
dd: function(event, can) { can._last_text = can.current.text(), can.onaction.selectLine(event, can, can.onaction.deleteLine(can, can.current.line)) },
|
||||
p: function(event, can) { can.onaction.insertLine(can, can._last_text, can.current.next()) },
|
||||
P: function(event, can) { can.onaction.insertLine(can, can._last_text, can.current.line) },
|
||||
|
||||
s: function(event, can) { can.onaction.save(event, can) },
|
||||
":": function(event, can) { can.onimport.toolkit(can, {index: "cli.system"}, function(sub) { can.toolkit["cli.system"] = sub.select() }) },
|
||||
r: function(event, can) { can.onaction["执行"](event, can) },
|
||||
v: function(event, can) { can.onaction["展示"](event, can) },
|
||||
},
|
||||
insert: {
|
||||
jk: function(event, can, target) { can.onkeymap._normal(can),
|
||||
can.onkeymap.DelText(target, target.selectionStart-1, 1)
|
||||
jk: function(event, can, target) { can.onkeymap._normal(event, can),
|
||||
can.onkeymap.deleteText(target, target.selectionStart-1, 1)
|
||||
can.current.text(can.ui.current.value)
|
||||
},
|
||||
Escape: function(event, can) { can.onkeymap._normal(can) },
|
||||
Escape: function(event, can) { can.onkeymap._normal(event, can) },
|
||||
Tab: function(event, can) {
|
||||
can.onkeymap.insertText(can.ui.current, "\t")
|
||||
can.onkeymap.prevent(event)
|
||||
},
|
||||
|
||||
Enter: function(event, can, target) {
|
||||
can.onaction.selectLine(event, can, can.onaction.insertLine(can, can.onkeymap.DelText(target, target.selectionEnd), can.current.next()))
|
||||
var line = can.onaction.insertLine(can, can.onkeymap.deleteText(target, target.selectionEnd), can.current.next())
|
||||
can.current.text(can.ui.current.value), can.onaction.selectLine(event, can, line)
|
||||
},
|
||||
Backspace: function(event, can, target) {
|
||||
if (target.selectionStart > 0) { return }
|
||||
@ -102,10 +96,10 @@ Volcanos("onkeymap", {help: "键盘交互", list: [],
|
||||
var pos = can.current.text().length
|
||||
|
||||
can.ui.current.value = can.current.text()+rest
|
||||
can.onaction.cursorMove(can, can.ui.current, 0, pos)
|
||||
can.onkeymap.cursorMove(can, can.ui.current, 0, pos)
|
||||
},
|
||||
ArrowDown: function(event, can) { can.onaction.selectLine(event, can, can.current.next()) },
|
||||
ArrowUp: function(event, can) { can.onaction.selectLine(event, can, can.current.prev()) },
|
||||
ArrowDown: function(event, can) { can.onaction.selectLine(event, can, can.current.next()) },
|
||||
},
|
||||
}, _engine: {},
|
||||
})
|
||||
@ -119,20 +113,26 @@ Volcanos("onaction", {help: "控件交互", list: [nfs.SAVE],
|
||||
_selectLine: function(event, can) {
|
||||
can.page.Select(can, can.current.line, "td.text", function(td) { can.current.line.appendChild(can.ui.current)
|
||||
can.page.Modify(can, can.ui.current, {style: kit.Dict(html.LEFT, td.offsetLeft-1, html.WIDTH,td.offsetWidth-12), value: td.innerText})
|
||||
if (event) { if (can.mode == "command") { can.onkeymap._insert(event, can) }
|
||||
can.ui.current.focus(), can.onaction.cursorMove(can, can.ui.current, 0, (event.offsetX)/13-1)
|
||||
if (event) { if (can.mode == "plugin") { can.onkeymap._insert(event, can) }
|
||||
can.ui.current.focus(), can.onkeymap.cursorMove(can, can.ui.current, 0, (event.offsetX)/13-1)
|
||||
can.ui.content.scrollLeft -= td.offsetLeft
|
||||
}
|
||||
})
|
||||
},
|
||||
rerankLine: function(can, value) { can.max = 0
|
||||
can.page.Select(can, can.ui.content, html.TR, function(item, index) {
|
||||
can.max++, can.page.Select(can, item, "td.line", function(item) { item.innerText = index+1 })
|
||||
})
|
||||
},
|
||||
insertLine: function(can, value, before) {
|
||||
var line = can.onaction.appendLine(can, value)
|
||||
before && can.ui.content.insertBefore(line, before)
|
||||
return can.onaction.rerankLine(can), line
|
||||
},
|
||||
deleteLine: function(can, line) {
|
||||
can.page.Remove(can, line)
|
||||
can.onaction.rerankLine(can)
|
||||
var next = line.nextSibling||line.previousSibling
|
||||
can.page.Remove(can, line), can.onaction.rerankLine(can)
|
||||
return next
|
||||
},
|
||||
modifyLine: function(can, line, value) {
|
||||
can.page.Select(can, can.ui.content, html.TR, function(item, index) {
|
||||
@ -142,17 +142,6 @@ Volcanos("onaction", {help: "控件交互", list: [nfs.SAVE],
|
||||
})
|
||||
})
|
||||
},
|
||||
rerankLine: function(can, value) { can.max = 0
|
||||
can.page.Select(can, can.ui.content, html.TR, function(item, index) {
|
||||
can.max++, can.page.Select(can, item, "td.line", function(item) {
|
||||
item.innerText = index+1
|
||||
})
|
||||
})
|
||||
},
|
||||
cursorMove: function(can, target, count, begin) {
|
||||
begin != undefined && target.setSelectionRange(begin, begin)
|
||||
target.setSelectionRange(target.selectionStart+count, target.selectionStart+count)
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: ["文件数", "模式", "按键", "解析器", "文件名", "当前行", "跳转数"]})
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user