mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 16:58:06 +08:00
opt code
This commit is contained in:
parent
d5502bacfb
commit
e41bbd9861
17
frame.js
17
frame.js
@ -328,25 +328,26 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
||||
})
|
||||
})
|
||||
},
|
||||
plugin: function(can, meta, cb, target) { meta = meta||{}
|
||||
plugin: function(can, meta, cb, target) { meta = meta||{}, meta.index = meta.index||can.core.Keys(meta.ctx, meta.cmd)
|
||||
meta.inputs && meta.inputs.length > 0? can.onappend._plugin(can, {meta: meta.meta, list: meta.list}, meta, cb, target):
|
||||
can.run({}, [ctx.ACTION, ctx.COMMAND, meta.index||can.core.Keys(meta.ctx, meta.cmd)], function(msg) { msg.Table(function(value) {
|
||||
can.run({}, [ctx.ACTION, ctx.COMMAND, meta.index], function(msg) { msg.Table(function(value) {
|
||||
can.onappend._plugin(can, value, meta, cb, target)
|
||||
}) }, true)
|
||||
},
|
||||
_plugin: function(can, value, meta, cb, target) {
|
||||
meta.feature = can.base.Obj(value.meta, meta.feature||{})
|
||||
meta.inputs = can.base.Obj(value.list, meta.inputs||[])
|
||||
meta.feature = meta.feature||can.base.Obj(value.meta, {})
|
||||
meta.inputs = meta.inputs||can.base.Obj(value.list, [])
|
||||
|
||||
meta.height = meta.height||can.Conf(html.HEIGHT)
|
||||
meta.width = meta.width||can.Conf(html.WIDTH)
|
||||
|
||||
meta.name = value.name||meta.name||html.STORY
|
||||
meta.help = value.help||meta.help||html.STORY
|
||||
meta.type = meta.type||html.STORY
|
||||
meta.name = meta.name||value.name||chat.PLUGIN
|
||||
meta.help = meta.help||value.help||chat.PLUGIN
|
||||
meta.type = meta.type||chat.PLUGIN
|
||||
|
||||
can.onappend._init(can, meta, ["/plugin/state.js"], function(sub, skip) {
|
||||
sub.base.isFunc(cb) && cb(sub, meta, skip)
|
||||
sub.run = function(event, cmds, cb) { can.run(event, can.misc.Concat([ctx.ACTION, cli.RUN, meta.index], cmds), cb) }
|
||||
can.base.isFunc(cb) && cb(sub, meta, skip)
|
||||
}, target||can._output)
|
||||
},
|
||||
|
||||
|
@ -4,7 +4,7 @@ Volcanos("base", {help: "数据类型",
|
||||
},
|
||||
Obj: function(value, def) {
|
||||
try {
|
||||
return (typeof value == "string" && value != ""? JSON.parse(value): value) || def || {}
|
||||
return (typeof value == "string" && value != ""? JSON.parse(value): value)||def
|
||||
} catch (e) {
|
||||
return [value]
|
||||
}
|
||||
|
@ -342,7 +342,7 @@ Volcanos("page", {help: "用户界面", ClassList: {
|
||||
if (can.base.isObject(key)) {
|
||||
return can.core.Item(key, function(key, value) { can.page.SelectArgs(can, option, key, value) }), [key]
|
||||
}
|
||||
if (!can.base.isFunc(cb)) { var value = cb; cb = function(item) {
|
||||
if (!can.base.isFunc(cb)) { var value = cb; cb = function(item) { if (item.type == "button" ) { return }
|
||||
return item.name && (can.base.isUndefined(value)? item.value: (item.value = value)) || ""
|
||||
} }
|
||||
if (key.indexOf(".") > -1) { return [""]}
|
||||
|
@ -118,7 +118,7 @@ Volcanos("user", {help: "用户操作", agent: {
|
||||
{username: "username"}, {password: "password"},
|
||||
], function(event, button, data, list) { return {
|
||||
"登录": function() {
|
||||
can.run({}, [ctx.ACTION, "login", data["username"], data["password"]], function(msg) {
|
||||
can.run({}, ["login", data["username"], data["password"]], function(msg) {
|
||||
if (msg.Option("user.name")) {
|
||||
can.page.Remove(can, ui._target), can.base.isFunc(cb) && cb()
|
||||
} else {
|
||||
|
@ -286,6 +286,9 @@ fieldset.plugin {
|
||||
fieldset.plugin>div.status {
|
||||
border-top:1px solid darkcyan;
|
||||
}
|
||||
fieldset.story>legend {
|
||||
display:none;
|
||||
}
|
||||
fieldset.story>div.status {
|
||||
border-top:1px solid darkcyan;
|
||||
}
|
||||
|
@ -79,8 +79,8 @@ Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, p
|
||||
can.core.List(storm.action, function(value) {
|
||||
msg.Push("name", value.name||"")
|
||||
msg.Push("help", value.help||"")
|
||||
msg.Push("inputs", JSON.stringify(value.inputs||[]))
|
||||
msg.Push("feature", JSON.stringify(value.feature||{}))
|
||||
msg.Push("inputs", JSON.stringify(value.inputs))
|
||||
msg.Push("feature", JSON.stringify(value.feature))
|
||||
msg.Push("index", value.index||"")
|
||||
msg.Push("args", value.args||"[]")
|
||||
}), can.base.isFunc(cb) && cb(msg)
|
||||
|
18
panel/cmd.js
18
panel/cmd.js
@ -3,22 +3,20 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
|
||||
can.base.isFunc(cb) && cb()
|
||||
},
|
||||
onmain: function(can) { can._names = location.pathname
|
||||
var msg = can.request({}, {_names: location.pathname})
|
||||
can.Conf(chat.TOOL)? can.core.Next(can.Conf(chat.TOOL), function(line, next) {
|
||||
can.onaction._plugin(can, line.index, can.base.Obj(line.args, []), next)
|
||||
var msg = can.request({})
|
||||
can.Conf(chat.TOOL)? can.core.Next(can.Conf(chat.TOOL), function(item, next) {
|
||||
can.onaction._plugin(can, item, next)
|
||||
|
||||
}): can.run(msg._event, [ctx.ACTION, ctx.COMMAND], function(msg) {
|
||||
can.core.Next(msg.Table(), function(line, next) {
|
||||
can.onaction._plugin(can, line.index, can.base.Obj(line.args, []), next)
|
||||
can.core.Next(msg.Table(), function(item, next) {
|
||||
can.onaction._plugin(can, item, next)
|
||||
})
|
||||
})
|
||||
can.page.ClassList.add(can, can._target, "Action")
|
||||
},
|
||||
_plugin: function(can, index, args, next) {
|
||||
can.onappend.plugin(can, {type: chat.PLUGIN, index: index, args: args, opts: can.user.Search(), height: window.innerHeight, width: window.innerWidth}, function(sub, meta) {
|
||||
sub.run = function(event, cmds, cb) { can.run(event, can.misc.Concat([ctx.ACTION, cli.RUN, index], cmds), cb) }
|
||||
can.user.title(meta.name), next()
|
||||
})
|
||||
_plugin: function(can, item, next) {
|
||||
item.height = window.innerHeight, item.width = window.innerWidth, item.opts = can.user.Search()
|
||||
can.onappend.plugin(can, item, function(sub, meta) { can.user.title(meta.name), next() })
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -28,6 +28,5 @@ fieldset.Search div.output div.display {
|
||||
overflow:auto;
|
||||
}
|
||||
fieldset.Search div.output div.profile {
|
||||
max-height:400px;
|
||||
overflow:auto;
|
||||
}
|
||||
|
@ -9,6 +9,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
})); table && can.page.Modify(can, can.ui.display, {style: {width: table.offsetWidth}})
|
||||
|
||||
msg.Length() == 1 && can.page.Select(can, table, html.TD)[0].click()
|
||||
|
||||
can.get("Action", "size", function(msg, height) {
|
||||
can.page.Modify(can, can.ui.profile, {"max-height": height-table.offsetHeight})
|
||||
})
|
||||
},
|
||||
_word: function(can, msg, cmds, fields) { can.type = cmds[0]
|
||||
var cb = can.onaction[cmds[1]]; if (cb) { cb({}, can); return }
|
||||
@ -34,7 +38,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
}, can.onimport._word(can, msg, cmds, fields)
|
||||
|
||||
can.get("Action", "size", function(msg, top, left, width, height) {
|
||||
can.page.Modify(can, can._output, {style: {"max-width": width, "max-height": height-75}})
|
||||
can.page.Modify(can, can._output, {style: {"max-width": width}})
|
||||
can.page.Modify(can, can._target, {style: {top: top, left: left}})
|
||||
})
|
||||
},
|
||||
|
@ -1,66 +1,45 @@
|
||||
Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, target) {
|
||||
if (!can.base.endWith(can.Option("path"), "/")) {
|
||||
can.Option("file", can.Option("path").split("/").pop())
|
||||
can.Option("path", can.base.trimSuffix(can.Option("path"), can.Option("file")))
|
||||
}
|
||||
can.onmotion.clear(can), can.ui = can.onlayout.profile(can)
|
||||
can.onmotion.clear(can)
|
||||
can.ui = can.onlayout.profile(can)
|
||||
can.onimport._content(can, target)
|
||||
can.onimport._output(can, target)
|
||||
can.onimport._search(can, target)
|
||||
can.onimport._favor(can, target)
|
||||
// can.onimport._search(can, target)
|
||||
|
||||
can.history = can.history || []
|
||||
msg.Option({path: can.Option("path"), file: can.Option("file"), line: can.Option("line")||1})
|
||||
can.tabview = can.tabview || {}, can.tabview[can.Option("path")+can.Option("file")] = msg
|
||||
can.history = can.history||[]
|
||||
msg.Option({path: can.Option(nfs.PATH), file: can.Option(nfs.FILE), line: can.Option(nfs.LINE)||1})
|
||||
can.tabview = can.tabview||{}, can.tabview[can.Option(nfs.PATH)+can.Option(nfs.FILE)] = msg
|
||||
|
||||
can.onimport.tabview(can, msg.Option("path"), msg.Option("file"), msg.Option("line")||1)
|
||||
can.onimport.project(can, msg.Option("path"))
|
||||
can.onimport.tabview(can, msg.Option(nfs.PATH), msg.Option(nfs.FILE), msg.Option(nfs.LINE)||1)
|
||||
can.onimport.project(can, msg.Option(nfs.PATH))
|
||||
can.base.isFunc(cb) && cb(msg)
|
||||
},
|
||||
_content: function(can, target) {
|
||||
var height = can.Conf("height")-(can.user.mod.isCmd? 54: 320); height < 240 && (height = 240)
|
||||
var height = can.Conf(chat.HEIGHT)-(can.user.mod.isCmd? 54: 320); height < 240 && (height = 240)
|
||||
can.page.Modify(can, can.ui.project, {style: {"max-height": height}})
|
||||
can.page.Modify(can, can.ui.content, {style: {"max-height": height}})
|
||||
can.page.Modify(can, can.ui.display, {style: {display: "none"}})
|
||||
can.page.Modify(can, can.ui.display, {style: {display: chat.NONE}})
|
||||
},
|
||||
_output: function(can, target) {
|
||||
var ui = can.page.Append(can, can.ui.display, [
|
||||
{view: "action"}, {view: "output"},
|
||||
]); can.ui.output = ui.output
|
||||
var ui = can.page.Append(can, can.ui.display, [{view: html.ACTION}, {view: html.OUTPUT}]); can.ui.output = ui.output
|
||||
|
||||
can.onappend._action(can, ["运行", "清空", "关闭"], ui.action, {
|
||||
"运行": function(event) { can.onaction["运行"](event, can) },
|
||||
"清空": function(event) { can.onmotion.clear(can, can.ui.output) },
|
||||
"关闭": function(event) { can.onmotion.hidden(can, can.ui.display) },
|
||||
can.onappend._action(can, ["exec", cli.CLEAR, cli.CLOSE], ui.action, {
|
||||
exec: function(event) { can.onaction["exec"](event, can) },
|
||||
clear: function(event) { can.onmotion.clear(can, can.ui.output) },
|
||||
close: function(event) { can.onmotion.hidden(can, can.ui.display) },
|
||||
})
|
||||
},
|
||||
_search: function(can, target) {
|
||||
var ui = can.page.Append(can, target, [
|
||||
{view: "search", style: {display: "none"}, list: [
|
||||
{view: "action", list: [
|
||||
{input: ["word", function(event) {
|
||||
event.key == "Enter" && can.onaction.searchLine(event, can, ui.word.value)
|
||||
}], value: "main", onfocus: function(event) { event.target.setSelectionRange(0, -1) }},
|
||||
{button: ["搜索", function(event) { can.onaction.searchLine(event, can, ui.word.value) }]},
|
||||
{button: ["back", function(event) { can.onaction["back"](event, can) }]},
|
||||
{button: ["关闭", function(event) { can.onaction["搜索"](event, can) }]},
|
||||
]},
|
||||
{view: "tags", style: {"max-height": 160}},
|
||||
]},
|
||||
]); can.base.Copy(can.ui, ui, "search", "word", "tags")
|
||||
},
|
||||
_favor: function(can, target) {
|
||||
can.onappend.plugin(can, {index: "web.code.favor"}, function(sub) {
|
||||
sub.run = function(event, cmds, cb) {
|
||||
var msg = can.request(event); if (cmds && cmds[0] == "action") { switch (cmds[1]) {
|
||||
case "inner": can.onimport.tabview(can, msg.Option("path"), msg.Option("file"), msg.Option("line")); return
|
||||
can.onappend.plugin(can, {type: chat.STORY, index: "web.code.favor"}, function(sub) {
|
||||
sub.run = function(event, cmds, cb) { var msg = can.request(event)
|
||||
if (cmds && cmds[0] == ctx.ACTION) { switch (cmds[1]) {
|
||||
case code.INNER: can.onimport.tabview(can, msg.Option(nfs.PATH), msg.Option(nfs.FILE), msg.Option(nfs.LINE)); return
|
||||
} }
|
||||
|
||||
can.run(event, can.misc.Concat([ctx.ACTION, "favor"], cmds), function(msg) {
|
||||
can.base.isFunc(cb) && cb(msg)
|
||||
can.core.Timer(10, function() {
|
||||
can.onappend._action(sub, ["关闭"], sub._action, {
|
||||
"关闭": function(event) { can.onmotion.hidden(sub, sub._target) },
|
||||
can.run(event, can.misc.Concat([ctx.ACTION, code.FAVOR], cmds), function(msg) {
|
||||
can.base.isFunc(cb) && cb(msg), can.core.Timer(10, function() {
|
||||
can.onappend._action(sub, [cli.CLOSE], sub._action, {
|
||||
close: function(event) { can.onmotion.hidden(sub, sub._target) },
|
||||
})
|
||||
})
|
||||
}, true)
|
||||
@ -69,23 +48,37 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb,
|
||||
can.onmotion.hidden(sub, sub._target)
|
||||
}, target)
|
||||
},
|
||||
_search: function(can, target) {
|
||||
var ui = can.page.Append(can, target, [
|
||||
{view: mdb.SEARCH, style: {display: chat.NONE}, list: [
|
||||
{view: chat.ACTION, list: [
|
||||
{input: ["word", function(event) {
|
||||
event.key == lang.ENTER && can.onaction.searchLine(event, can, ui.word.value)
|
||||
}], value: "main", onfocus: function(event) { event.target.setSelectionRange(0, -1) }},
|
||||
{button: [mdb.SEARCH, function(event) { can.onaction.searchLine(event, can, ui.word.value) }]},
|
||||
{button: ["back", function(event) { can.onaction["back"](event, can) }]},
|
||||
{button: ["close", function(event) { can.onaction["搜索"](event, can) }]},
|
||||
]},
|
||||
{view: "tags", style: {"max-height": 160}},
|
||||
]},
|
||||
]); can.base.Copy(can.ui, ui, mdb.SEARCH, "word", "tags")
|
||||
},
|
||||
|
||||
project: function(can, path) { can.Option({path: path})
|
||||
var msg = can.request({}, {dir_root: path, dir_deep: true})
|
||||
can.run(msg._event, ["./"], function(msg) {
|
||||
can.onmotion.clear(can, can.ui.project)
|
||||
can.onappend.tree(can, msg.Table(), "path", "/", function(event, item) {
|
||||
can.run(msg._event, ["./"], function(msg) { can.onmotion.clear(can, can.ui.project)
|
||||
can.onappend.tree(can, msg.Table(), nfs.PATH, ice.PS, function(event, item) {
|
||||
can.onimport.tabview(can, path, item.path)
|
||||
}, can.ui.project), can.Status("文件数", msg.Length())
|
||||
}, true)
|
||||
},
|
||||
tabview: function(can, path, file, line, cb) {
|
||||
if (can.tabview[path+file]) {
|
||||
can._msg && can._msg.Option("line", can.Option("line"))
|
||||
can._msg && can._msg.Option(nfs.LINE, can.Option(nfs.LINE))
|
||||
can._msg = can.tabview[path+file]
|
||||
|
||||
can.Option({path: path, file: file, line: line||parseInt(can._msg.Option("line"))||1})
|
||||
can._msg.Option("line", can.Option("line"))
|
||||
can.Option({path: path, file: file, line: line||parseInt(can._msg.Option(nfs.LINE))||1})
|
||||
can._msg.Option(nfs.LINE, can.Option(nfs.LINE))
|
||||
return can.onsyntax._init(can, can._msg), can.base.isFunc(cb) && cb()
|
||||
}
|
||||
|
||||
@ -94,7 +87,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb,
|
||||
can.tabview[path+file] = msg
|
||||
|
||||
msg._tab = can.page.Append(can, can._action, [
|
||||
{text: [file.split("/").pop(), "div", "file"], title: file, onclick: function(event) {
|
||||
{text: [file.split(ice.PS).pop(), html.DIV, nfs.FILE], title: file, onclick: function(event) {
|
||||
can.onimport.tabview(can, path, file, "", cb)
|
||||
}, _init: function(item) {
|
||||
can.core.Timer(10, function() { item.click() })
|
||||
@ -103,57 +96,49 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb,
|
||||
]).last
|
||||
}, true)
|
||||
},
|
||||
}, ["/plugin/local/code/inner.css"])
|
||||
}, [""])
|
||||
Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"], _init: function(can, msg) {
|
||||
// caches save
|
||||
can.file && can.core.List(["content", "profile", "output"], function(item) { can.page.Cache(can.file, can.ui[item], {
|
||||
can.file && can.core.List([chat.CONTENT, chat.PROFILE, chat.OUTPUT], function(item) { can.page.Cache(can.file, can.ui[item], {
|
||||
scrollTop: can.ui.content.scrollTop, current: can.current, max: can.max,
|
||||
}) })
|
||||
|
||||
can.file = can.base.Path(msg.Option("path"), msg.Option("file"))
|
||||
can.file = can.base.Path(msg.Option(nfs.PATH), msg.Option(nfs.FILE))
|
||||
can.parse = can.base.Ext(can.file)
|
||||
can.Status("模式", "normal")
|
||||
|
||||
// caches load
|
||||
can.onmotion.select(can, can._action, "div.file", msg._tab)
|
||||
var cache = false; can.core.List(["content", "profile", "output"], function(item) {
|
||||
var cache = false; can.core.List([chat.CONTENT, chat.PROFILE, chat.OUTPUT], function(item) {
|
||||
var p = can.page.Cache(can.file, can.ui[item]); if (p != undefined && !cache) { cache = true
|
||||
can.onaction.selectLine(can, parseInt(msg.Option("line")))
|
||||
can.onaction.selectLine(can, parseInt(msg.Option(nfs.LINE)))
|
||||
can.ui.content.scrollTo(0, p.scrollTop)
|
||||
can.max = p.max
|
||||
}
|
||||
}); if (cache) { return }
|
||||
|
||||
switch (can.parse) {
|
||||
case "png":
|
||||
case "jpg":
|
||||
can.page.Append(can, can.ui.content, [{img: can.base.Path("/share/local", can.file)+"?"+can.user.Search(can, ice.POD)}])
|
||||
return
|
||||
}
|
||||
|
||||
function init(p) { can.max = 0
|
||||
can.core.List(can.ls = msg.Result().split("\n"), function(item) {
|
||||
can.core.List(can.ls = msg.Result().split(ice.NL), function(item) {
|
||||
can.onaction.appendLine(can, item)
|
||||
}), can.onaction.selectLine(can, msg.Option("line")||1)
|
||||
}), can.onaction.selectLine(can, msg.Option(nfs.LINE)||1)
|
||||
}
|
||||
|
||||
// plugin
|
||||
var p = can.onsyntax[can.parse]; !p? can.run({}, [ctx.ACTION, "plugin", can.parse, msg.Option("file"), msg.Option("path")], function(msg) {
|
||||
var p = can.onsyntax[can.parse]; !p? can.run({}, [ctx.ACTION, mdb.PLUGIN, can.parse, msg.Option(nfs.FILE), msg.Option(nfs.PATH)], function(msg) {
|
||||
init(p = can.onsyntax[can.parse] = can.base.Obj(msg.Result()))
|
||||
}, true): init(p)
|
||||
},
|
||||
_parse: function(can, line) { line = line || "", line = line.replace("<", "<").replace(">", ">")
|
||||
var p = can.onsyntax[can.parse]; if (!p) { return }
|
||||
p = can.onsyntax[p.link] || p
|
||||
_parse: function(can, line) { line = line||"", line = line.replace("<", "<").replace(">", ">")
|
||||
var p = can.onsyntax[can.parse]; if (!p) { return line }
|
||||
p = can.onsyntax[p.link]||p
|
||||
|
||||
function wrap(type, str) { return type? '<span class="'+type+'">'+str+'</span>': str }
|
||||
p.keyword && (line = can.core.List(can.core.Split(line, p.split && p.split.space || " ", p.split && p.split.operator || "{[(|)]}", {detail: true}), function(item, index, array) {
|
||||
item = typeof item == "object"? item: {text: item}, p.word && (item = p.word(item, index, array))
|
||||
p.keyword && (line = can.core.List(can.core.Split(line, p.split && p.split.space||ice.SP, p.split && p.split.operator || "{[(|)]}", {detail: true}), function(item, index, array) {
|
||||
item = can.base.isObject(item)? item: {text: item}, p.word && (item = p.word(item, index, array))
|
||||
var text = item.text; var key = item.keyword||p.keyword[text]
|
||||
|
||||
switch (item.type) {
|
||||
case "space": return text
|
||||
case "string": return wrap("string", item.left+text+item.right)
|
||||
switch (item.type) { case "space": return text
|
||||
case lang.STRING: return wrap(lang.STRING, item.left+text+item.right)
|
||||
default: return wrap(key, text)
|
||||
}
|
||||
}).join(""))
|
||||
@ -180,28 +165,27 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"],
|
||||
can.Status("跳转数", can.history.length)
|
||||
},
|
||||
"项目": function(event, can) {
|
||||
var width = can.Conf("width")-(can.onmotion.toggle(can, can.ui.project)? 170: 0)
|
||||
// can.page.Modify(can, can.ui.content, {style: {"min-width": width}})
|
||||
var width = can.Conf(chat.WIDTH)-(can.onmotion.toggle(can, can.ui.project)? 170: 0)
|
||||
},
|
||||
"收藏": function(event, can) { can.onmotion.toggle(can, can.ui.favor._target) },
|
||||
"搜索": function(event, can) { can.onmotion.toggle(can, can.ui.search) },
|
||||
"运行": function(event, can) { var msg = can.request(event, {_toast: "运行中..."})
|
||||
can.run(event, [ctx.ACTION, "engine", can.parse, can.Option("file"), can.Option("path")], function(msg) {
|
||||
"exec": function(event, can) { var msg = can.request(event, {_toast: "运行中..."})
|
||||
can.run(event, [ctx.ACTION, mdb.ENGINE, can.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) {
|
||||
can.onappend.table(can, msg, null, can.ui.output||can.ui.display)
|
||||
can.onappend.board(can, msg.Result(), can.ui.output||can.ui.display)
|
||||
can.page.Modify(can, can.ui.display, {style: {display: "block"}})
|
||||
can.page.Modify(can, can.ui.display, {style: {display: html.BLOCK}})
|
||||
}, true)
|
||||
},
|
||||
|
||||
appendLine: function(can, value) {
|
||||
var ui = can.page.Append(can, can.ui.content, [{type: "tr", list: [
|
||||
{view: ["line unselectable", "td", ++can.max], onclick: function(event) {
|
||||
var ui = can.page.Append(can, can.ui.content, [{type: html.TR, list: [
|
||||
{view: ["line unselectable", html.TD, ++can.max], onclick: function(event) {
|
||||
can.onaction.selectLine(can, ui.tr)
|
||||
|
||||
}, ondblclick: function(event) {
|
||||
can.onaction.favorLine(can, ui.text.innerText)
|
||||
}},
|
||||
{view: ["text", "td"], list: [can.onsyntax._parse(can, value)], onclick: function(event) {
|
||||
{view: [html.TEXT, html.TD], list: [can.onsyntax._parse(can, value)], onclick: function(event) {
|
||||
can.onaction._selectLine(can, ui)
|
||||
|
||||
}, ondblclick: function(event) {
|
||||
@ -210,7 +194,7 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"],
|
||||
]}]); return ui.tr
|
||||
},
|
||||
modifyLine: function(can, line, value) {
|
||||
can.page.Select(can, can.ui.content, "tr", function(item, index) {
|
||||
can.page.Select(can, can.ui.content, html.TR, function(item, index) {
|
||||
if (item != line && index+1 != line) { return }
|
||||
|
||||
can.page.Select(can, item, "td.text", function(item) {
|
||||
@ -219,26 +203,26 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"],
|
||||
})
|
||||
},
|
||||
rerankLine: function(can, value) { can.max = 0
|
||||
can.page.Select(can, can.ui.content, "tr", function(item, index) {
|
||||
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
|
||||
})
|
||||
})
|
||||
},
|
||||
selectLine: function(can, line) { if (!line) { return }
|
||||
can.page.Select(can, can.ui.content, "tr", function(item, index) {
|
||||
can.page.ClassList.del(can, item, "select")
|
||||
can.page.Select(can, can.ui.content, html.TR, function(item, index) {
|
||||
can.page.ClassList.del(can, item, html.SELECT)
|
||||
if (item != line && index+1 != line) { return }
|
||||
can.page.ClassList.add(can, item, "select")
|
||||
can.page.ClassList.add(can, item, html.SELECT)
|
||||
|
||||
line = item
|
||||
can.Option("line", index+1)
|
||||
can.Option(nfs.LINE, index+1)
|
||||
can.Status("文件名", can.file)
|
||||
can.Status("解析器", can.parse)
|
||||
can.Status("当前行", can.onexport.position(can, index+1))
|
||||
})
|
||||
|
||||
typeof line == "object" && can.page.Select(can, line, "td.text", function(item) {
|
||||
can.base.isObject(line) && can.page.Select(can, line, "td.text", function(item) {
|
||||
can.current = {
|
||||
scroll: function(x, y) {
|
||||
can.ui.content.scrollLeft += x
|
||||
@ -255,7 +239,7 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"],
|
||||
}, height: function() { return line.offsetHeight },
|
||||
}
|
||||
|
||||
var push = {path: can.Option("path"), file: can.Option("file"), line: can.Option("line")}
|
||||
var push = {path: can.Option(nfs.PATH), file: can.Option(nfs.FILE), line: can.Option(nfs.LINE)}
|
||||
can.base.Eq({path: push.path, file: push.file}, can.history[can.history.length-1]) || can.history.push(push)
|
||||
can.Status("跳转数", can.history.length)
|
||||
})
|
||||
@ -271,17 +255,16 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"],
|
||||
},
|
||||
searchLine: function(event, can, value) { value = value.trim()
|
||||
can.page.Modify(can, can.ui.search, {style: {display: ""}})
|
||||
value = can.ui.word.value = value || can.ui.word.value || "main"
|
||||
value = can.ui.word.value = value||can.ui.word.value||"main"
|
||||
|
||||
can.request(event, {_toast: "搜索中..."})
|
||||
can.run(event, [ctx.ACTION, "search", can.parse, value, can.Option("path")], function(msg) {
|
||||
|
||||
can.run(event, [ctx.ACTION, mdb.SEARCH, can.parse, value, can.Option(nfs.PATH)], function(msg) {
|
||||
can.onmotion.clear(can, can.ui.tags)
|
||||
can.onappend.table(can, msg, function(value, key, index, line) {
|
||||
value = value.replace("<", "<").replace(">", ">"), value = value.replace("./", "")
|
||||
|
||||
return {text: ["", "td"], list: [{text: [value, "div"]}], onclick: function(event) {
|
||||
line.line && can.onimport.tabview(can, can.Option("path"), line.file.replace("./", ""), parseInt(line.line), function() {
|
||||
return {text: ["", html.TD], list: [{text: [value, html.DIV]}], onclick: function(event) {
|
||||
line.line && can.onimport.tabview(can, can.Option(nfs.PATH), line.file.replace("./", ""), parseInt(line.line), function() {
|
||||
can.onaction.selectLine(can, line.line)
|
||||
})
|
||||
}}
|
||||
@ -313,13 +296,13 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"],
|
||||
|
||||
favorLine: function(can, value) {
|
||||
can.user.input(event, can, [
|
||||
{name: "zone", value: "@key=some"},
|
||||
{name: "name", value: "@key=some"},
|
||||
{name: "zone", value: "hi"},
|
||||
{name: "name", value: "hello"},
|
||||
], function(event, button, meta, list) {
|
||||
can.run(event, [ctx.ACTION, "favor",
|
||||
ctx.ACTION, "insert", "zone", meta.zone||"some",
|
||||
"type", can.parse, "name", meta.name||"some", "text", (value||"").trimRight(),
|
||||
"path", can.Option("path"), "file", can.Option("file"), "line", can.Option("line"),
|
||||
can.run(event, [ctx.ACTION, code.FAVOR,
|
||||
ctx.ACTION, mdb.INSERT, kit.MDB_ZONE, meta.zone||"",
|
||||
kit.MDB_TYPE, can.parse, kit.MDB_NAME, meta.name||"", kit.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.toast(can, "收藏成功")
|
||||
}, true)
|
||||
@ -346,12 +329,12 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"],
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: ["文件数", "解析器", "文件名", "当前行", "跳转数", "标签数"],
|
||||
position: function(can, index, total) { total = total || can.max
|
||||
return (parseInt(index))+"/"+parseInt(total)+" = "+parseInt((index)*100/total)+"%"
|
||||
return (parseInt(index))+ice.PS+parseInt(total)+" = "+parseInt((index)*100/total)+"%"
|
||||
},
|
||||
content: function(can) {
|
||||
return can.page.Select(can, can.ui.content, "td.text", function(item) {
|
||||
return item.innerText
|
||||
}).join("\n")+"\n"
|
||||
}).join(ice.NL)+ice.NL
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -55,7 +55,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
]}, {view: "output"},
|
||||
]); can.base.Copy(can.ui, ui, "output", "cmd")
|
||||
},
|
||||
}, ["/plugin/local/code/vimer.css"])
|
||||
}, [""])
|
||||
Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"], _init: function(can, mode) {
|
||||
can.core.List(can.onkeymap.list, function(item) { var engine = {}
|
||||
can.core.Item(can.onkeymap[item], function(key, cb) { var map = engine
|
||||
|
8
proto.js
8
proto.js
@ -17,7 +17,7 @@ var kit = {
|
||||
MDB_LIST: "list",
|
||||
}
|
||||
var ice = {
|
||||
SP: " ", PT: ".", NL: "\n",
|
||||
SP: " ", PS: "/", PT: ".", NL: "\n",
|
||||
POD: "pod", CTX: "ctx", CMD: "cmd", ARG: "arg", OPT: "opt",
|
||||
|
||||
TRUE: "true",
|
||||
@ -78,6 +78,9 @@ var ssh = {
|
||||
}
|
||||
var nfs = {
|
||||
DIR: "dir",
|
||||
PATH: "path",
|
||||
FILE: "file",
|
||||
LINE: "line",
|
||||
}
|
||||
var tcp = {
|
||||
HOST: "host",
|
||||
@ -85,6 +88,8 @@ var tcp = {
|
||||
|
||||
var code = {
|
||||
WEBPACK: "webpack",
|
||||
INNER: "inner",
|
||||
FAVOR: "favor",
|
||||
}
|
||||
var wiki = {
|
||||
TITLE: "title", BRIEF: "brief", REFER: "refer", SPARK: "spark",
|
||||
@ -273,7 +278,6 @@ function cmd(tool) {
|
||||
"/plugin/local/wiki/draw/path.js",
|
||||
"/plugin/local/wiki/draw.js",
|
||||
"/plugin/local/wiki/word.js",
|
||||
"/plugin/local/team/plan.js",
|
||||
],
|
||||
})
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user