1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00
This commit is contained in:
harveyshao 2021-10-31 22:32:17 +08:00
parent d5502bacfb
commit e41bbd9861
12 changed files with 123 additions and 131 deletions

View File

@ -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): 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) can.onappend._plugin(can, value, meta, cb, target)
}) }, true) }) }, true)
}, },
_plugin: function(can, value, meta, cb, target) { _plugin: function(can, value, meta, cb, target) {
meta.feature = can.base.Obj(value.meta, meta.feature||{}) meta.feature = meta.feature||can.base.Obj(value.meta, {})
meta.inputs = can.base.Obj(value.list, meta.inputs||[]) meta.inputs = meta.inputs||can.base.Obj(value.list, [])
meta.height = meta.height||can.Conf(html.HEIGHT) meta.height = meta.height||can.Conf(html.HEIGHT)
meta.width = meta.width||can.Conf(html.WIDTH) meta.width = meta.width||can.Conf(html.WIDTH)
meta.name = value.name||meta.name||html.STORY meta.name = meta.name||value.name||chat.PLUGIN
meta.help = value.help||meta.help||html.STORY meta.help = meta.help||value.help||chat.PLUGIN
meta.type = meta.type||html.STORY meta.type = meta.type||chat.PLUGIN
can.onappend._init(can, meta, ["/plugin/state.js"], function(sub, skip) { 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) }, target||can._output)
}, },

View File

@ -4,7 +4,7 @@ Volcanos("base", {help: "数据类型",
}, },
Obj: function(value, def) { Obj: function(value, def) {
try { try {
return (typeof value == "string" && value != ""? JSON.parse(value): value) || def || {} return (typeof value == "string" && value != ""? JSON.parse(value): value)||def
} catch (e) { } catch (e) {
return [value] return [value]
} }

View File

@ -342,7 +342,7 @@ Volcanos("page", {help: "用户界面", ClassList: {
if (can.base.isObject(key)) { if (can.base.isObject(key)) {
return can.core.Item(key, function(key, value) { can.page.SelectArgs(can, option, key, value) }), [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)) || "" return item.name && (can.base.isUndefined(value)? item.value: (item.value = value)) || ""
} } } }
if (key.indexOf(".") > -1) { return [""]} if (key.indexOf(".") > -1) { return [""]}

View File

@ -118,7 +118,7 @@ Volcanos("user", {help: "用户操作", agent: {
{username: "username"}, {password: "password"}, {username: "username"}, {password: "password"},
], function(event, button, data, list) { return { ], function(event, button, data, list) { return {
"登录": function() { "登录": 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")) { if (msg.Option("user.name")) {
can.page.Remove(can, ui._target), can.base.isFunc(cb) && cb() can.page.Remove(can, ui._target), can.base.isFunc(cb) && cb()
} else { } else {

View File

@ -286,6 +286,9 @@ fieldset.plugin {
fieldset.plugin>div.status { fieldset.plugin>div.status {
border-top:1px solid darkcyan; border-top:1px solid darkcyan;
} }
fieldset.story>legend {
display:none;
}
fieldset.story>div.status { fieldset.story>div.status {
border-top:1px solid darkcyan; border-top:1px solid darkcyan;
} }

View File

@ -79,8 +79,8 @@ Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, p
can.core.List(storm.action, function(value) { can.core.List(storm.action, function(value) {
msg.Push("name", value.name||"") msg.Push("name", value.name||"")
msg.Push("help", value.help||"") msg.Push("help", value.help||"")
msg.Push("inputs", JSON.stringify(value.inputs||[])) msg.Push("inputs", JSON.stringify(value.inputs))
msg.Push("feature", JSON.stringify(value.feature||{})) msg.Push("feature", JSON.stringify(value.feature))
msg.Push("index", value.index||"") msg.Push("index", value.index||"")
msg.Push("args", value.args||"[]") msg.Push("args", value.args||"[]")
}), can.base.isFunc(cb) && cb(msg) }), can.base.isFunc(cb) && cb(msg)

View File

@ -3,22 +3,20 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
can.base.isFunc(cb) && cb() can.base.isFunc(cb) && cb()
}, },
onmain: function(can) { can._names = location.pathname onmain: function(can) { can._names = location.pathname
var msg = can.request({}, {_names: location.pathname}) var msg = can.request({})
can.Conf(chat.TOOL)? can.core.Next(can.Conf(chat.TOOL), function(line, next) { can.Conf(chat.TOOL)? can.core.Next(can.Conf(chat.TOOL), function(item, next) {
can.onaction._plugin(can, line.index, can.base.Obj(line.args, []), next) can.onaction._plugin(can, item, next)
}): can.run(msg._event, [ctx.ACTION, ctx.COMMAND], function(msg) { }): can.run(msg._event, [ctx.ACTION, ctx.COMMAND], function(msg) {
can.core.Next(msg.Table(), function(line, next) { can.core.Next(msg.Table(), function(item, next) {
can.onaction._plugin(can, line.index, can.base.Obj(line.args, []), next) can.onaction._plugin(can, item, next)
}) })
}) })
can.page.ClassList.add(can, can._target, "Action") can.page.ClassList.add(can, can._target, "Action")
}, },
_plugin: function(can, index, args, next) { _plugin: function(can, item, 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) { item.height = window.innerHeight, item.width = window.innerWidth, item.opts = can.user.Search()
sub.run = function(event, cmds, cb) { can.run(event, can.misc.Concat([ctx.ACTION, cli.RUN, index], cmds), cb) } can.onappend.plugin(can, item, function(sub, meta) { can.user.title(meta.name), next() })
can.user.title(meta.name), next()
})
}, },
}) })

View File

@ -28,6 +28,5 @@ fieldset.Search div.output div.display {
overflow:auto; overflow:auto;
} }
fieldset.Search div.output div.profile { fieldset.Search div.output div.profile {
max-height:400px;
overflow:auto; overflow:auto;
} }

View File

@ -9,6 +9,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
})); table && can.page.Modify(can, can.ui.display, {style: {width: table.offsetWidth}}) })); table && can.page.Modify(can, can.ui.display, {style: {width: table.offsetWidth}})
msg.Length() == 1 && can.page.Select(can, table, html.TD)[0].click() 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] _word: function(can, msg, cmds, fields) { can.type = cmds[0]
var cb = can.onaction[cmds[1]]; if (cb) { cb({}, can); return } 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.onimport._word(can, msg, cmds, fields)
can.get("Action", "size", function(msg, top, left, width, height) { 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}}) can.page.Modify(can, can._target, {style: {top: top, left: left}})
}) })
}, },

View File

@ -1,66 +1,45 @@
Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, target) { Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, target) {
if (!can.base.endWith(can.Option("path"), "/")) { can.onmotion.clear(can)
can.Option("file", can.Option("path").split("/").pop()) can.ui = can.onlayout.profile(can)
can.Option("path", can.base.trimSuffix(can.Option("path"), can.Option("file")))
}
can.onmotion.clear(can), can.ui = can.onlayout.profile(can)
can.onimport._content(can, target) can.onimport._content(can, target)
can.onimport._output(can, target) can.onimport._output(can, target)
can.onimport._search(can, target)
can.onimport._favor(can, target) can.onimport._favor(can, target)
// can.onimport._search(can, target)
can.history = can.history || [] can.history = can.history||[]
msg.Option({path: can.Option("path"), file: can.Option("file"), line: can.Option("line")||1}) 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("path")+can.Option("file")] = msg 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.tabview(can, msg.Option(nfs.PATH), msg.Option(nfs.FILE), msg.Option(nfs.LINE)||1)
can.onimport.project(can, msg.Option("path")) can.onimport.project(can, msg.Option(nfs.PATH))
can.base.isFunc(cb) && cb(msg) can.base.isFunc(cb) && cb(msg)
}, },
_content: function(can, target) { _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.project, {style: {"max-height": height}})
can.page.Modify(can, can.ui.content, {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) { _output: function(can, target) {
var ui = can.page.Append(can, can.ui.display, [ var ui = can.page.Append(can, can.ui.display, [{view: html.ACTION}, {view: html.OUTPUT}]); can.ui.output = ui.output
{view: "action"}, {view: "output"},
]); can.ui.output = ui.output
can.onappend._action(can, ["运行", "清空", "关闭"], ui.action, { can.onappend._action(can, ["exec", cli.CLEAR, cli.CLOSE], ui.action, {
"运行": function(event) { can.onaction["运行"](event, can) }, exec: function(event) { can.onaction["exec"](event, can) },
"清空": function(event) { can.onmotion.clear(can, can.ui.output) }, clear: function(event) { can.onmotion.clear(can, can.ui.output) },
"关闭": function(event) { can.onmotion.hidden(can, can.ui.display) }, 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) { _favor: function(can, target) {
can.onappend.plugin(can, {index: "web.code.favor"}, function(sub) { can.onappend.plugin(can, {type: chat.STORY, index: "web.code.favor"}, function(sub) {
sub.run = function(event, cmds, cb) { sub.run = function(event, cmds, cb) { var msg = can.request(event)
var msg = can.request(event); if (cmds && cmds[0] == "action") { switch (cmds[1]) { if (cmds && cmds[0] == ctx.ACTION) { switch (cmds[1]) {
case "inner": can.onimport.tabview(can, msg.Option("path"), msg.Option("file"), msg.Option("line")); return 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.run(event, can.misc.Concat([ctx.ACTION, code.FAVOR], cmds), function(msg) {
can.base.isFunc(cb) && cb(msg) can.base.isFunc(cb) && cb(msg), can.core.Timer(10, function() {
can.core.Timer(10, function() { can.onappend._action(sub, [cli.CLOSE], sub._action, {
can.onappend._action(sub, ["关闭"], sub._action, { close: function(event) { can.onmotion.hidden(sub, sub._target) },
"关闭": function(event) { can.onmotion.hidden(sub, sub._target) },
}) })
}) })
}, true) }, true)
@ -69,23 +48,37 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb,
can.onmotion.hidden(sub, sub._target) can.onmotion.hidden(sub, sub._target)
}, 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}) project: function(can, path) { can.Option({path: path})
var msg = can.request({}, {dir_root: path, dir_deep: true}) var msg = can.request({}, {dir_root: path, dir_deep: true})
can.run(msg._event, ["./"], function(msg) { can.run(msg._event, ["./"], function(msg) { can.onmotion.clear(can, can.ui.project)
can.onmotion.clear(can, can.ui.project) can.onappend.tree(can, msg.Table(), nfs.PATH, ice.PS, function(event, item) {
can.onappend.tree(can, msg.Table(), "path", "/", function(event, item) {
can.onimport.tabview(can, path, item.path) can.onimport.tabview(can, path, item.path)
}, can.ui.project), can.Status("文件数", msg.Length()) }, can.ui.project), can.Status("文件数", msg.Length())
}, true) }, true)
}, },
tabview: function(can, path, file, line, cb) { tabview: function(can, path, file, line, cb) {
if (can.tabview[path+file]) { 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._msg = can.tabview[path+file]
can.Option({path: path, file: file, line: line||parseInt(can._msg.Option("line"))||1}) can.Option({path: path, file: file, line: line||parseInt(can._msg.Option(nfs.LINE))||1})
can._msg.Option("line", can.Option("line")) can._msg.Option(nfs.LINE, can.Option(nfs.LINE))
return can.onsyntax._init(can, can._msg), can.base.isFunc(cb) && cb() 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 can.tabview[path+file] = msg
msg._tab = can.page.Append(can, can._action, [ 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) can.onimport.tabview(can, path, file, "", cb)
}, _init: function(item) { }, _init: function(item) {
can.core.Timer(10, function() { item.click() }) can.core.Timer(10, function() { item.click() })
@ -103,57 +96,49 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb,
]).last ]).last
}, true) }, true)
}, },
}, ["/plugin/local/code/inner.css"]) }, [""])
Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"], _init: function(can, msg) { Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"], _init: function(can, msg) {
// caches save // 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, 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.parse = can.base.Ext(can.file)
can.Status("模式", "normal") can.Status("模式", "normal")
// caches load // caches load
can.onmotion.select(can, can._action, "div.file", msg._tab) 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 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.ui.content.scrollTo(0, p.scrollTop)
can.max = p.max can.max = p.max
} }
}); if (cache) { return } }); 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 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.appendLine(can, item)
}), can.onaction.selectLine(can, msg.Option("line")||1) }), can.onaction.selectLine(can, msg.Option(nfs.LINE)||1)
} }
// plugin // 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())) init(p = can.onsyntax[can.parse] = can.base.Obj(msg.Result()))
}, true): init(p) }, true): init(p)
}, },
_parse: function(can, line) { line = line || "", line = line.replace("<", "&lt;").replace(">", "&gt;") _parse: function(can, line) { line = line||"", line = line.replace("<", "&lt;").replace(">", "&gt;")
var p = can.onsyntax[can.parse]; if (!p) { return } var p = can.onsyntax[can.parse]; if (!p) { return line }
p = can.onsyntax[p.link] || p p = can.onsyntax[p.link]||p
function wrap(type, str) { return type? '<span class="'+type+'">'+str+'</span>': str } 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) { 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 = typeof item == "object"? item: {text: item}, p.word && (item = p.word(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] var text = item.text; var key = item.keyword||p.keyword[text]
switch (item.type) { switch (item.type) { case "space": return text
case "space": return text case lang.STRING: return wrap(lang.STRING, item.left+text+item.right)
case "string": return wrap("string", item.left+text+item.right)
default: return wrap(key, text) default: return wrap(key, text)
} }
}).join("")) }).join(""))
@ -180,28 +165,27 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"],
can.Status("跳转数", can.history.length) can.Status("跳转数", can.history.length)
}, },
"项目": function(event, can) { "项目": function(event, can) {
var width = can.Conf("width")-(can.onmotion.toggle(can, can.ui.project)? 170: 0) var width = can.Conf(chat.WIDTH)-(can.onmotion.toggle(can, can.ui.project)? 170: 0)
// can.page.Modify(can, can.ui.content, {style: {"min-width": width}})
}, },
"收藏": function(event, can) { can.onmotion.toggle(can, can.ui.favor._target) }, "收藏": function(event, can) { can.onmotion.toggle(can, can.ui.favor._target) },
"搜索": function(event, can) { can.onmotion.toggle(can, can.ui.search) }, "搜索": function(event, can) { can.onmotion.toggle(can, can.ui.search) },
"运行": function(event, can) { var msg = can.request(event, {_toast: "运行中..."}) "exec": 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) { 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.table(can, msg, null, can.ui.output||can.ui.display)
can.onappend.board(can, msg.Result(), 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) }, true)
}, },
appendLine: function(can, value) { appendLine: function(can, value) {
var ui = can.page.Append(can, can.ui.content, [{type: "tr", list: [ var ui = can.page.Append(can, can.ui.content, [{type: html.TR, list: [
{view: ["line unselectable", "td", ++can.max], onclick: function(event) { {view: ["line unselectable", html.TD, ++can.max], onclick: function(event) {
can.onaction.selectLine(can, ui.tr) can.onaction.selectLine(can, ui.tr)
}, ondblclick: function(event) { }, ondblclick: function(event) {
can.onaction.favorLine(can, ui.text.innerText) 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) can.onaction._selectLine(can, ui)
}, ondblclick: function(event) { }, ondblclick: function(event) {
@ -210,7 +194,7 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"],
]}]); return ui.tr ]}]); return ui.tr
}, },
modifyLine: function(can, line, value) { 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 } if (item != line && index+1 != line) { return }
can.page.Select(can, item, "td.text", function(item) { can.page.Select(can, item, "td.text", function(item) {
@ -219,26 +203,26 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"],
}) })
}, },
rerankLine: function(can, value) { can.max = 0 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) { can.max++, can.page.Select(can, item, "td.line", function(item) {
item.innerText = index+1 item.innerText = index+1
}) })
}) })
}, },
selectLine: function(can, line) { if (!line) { return } selectLine: function(can, line) { if (!line) { return }
can.page.Select(can, can.ui.content, "tr", function(item, index) { can.page.Select(can, can.ui.content, html.TR, function(item, index) {
can.page.ClassList.del(can, item, "select") can.page.ClassList.del(can, item, html.SELECT)
if (item != line && index+1 != line) { return } if (item != line && index+1 != line) { return }
can.page.ClassList.add(can, item, "select") can.page.ClassList.add(can, item, html.SELECT)
line = item line = item
can.Option("line", index+1) can.Option(nfs.LINE, index+1)
can.Status("文件名", can.file) can.Status("文件名", can.file)
can.Status("解析器", can.parse) can.Status("解析器", can.parse)
can.Status("当前行", can.onexport.position(can, index+1)) 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 = { can.current = {
scroll: function(x, y) { scroll: function(x, y) {
can.ui.content.scrollLeft += x can.ui.content.scrollLeft += x
@ -255,7 +239,7 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"],
}, height: function() { return line.offsetHeight }, }, 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.base.Eq({path: push.path, file: push.file}, can.history[can.history.length-1]) || can.history.push(push)
can.Status("跳转数", can.history.length) can.Status("跳转数", can.history.length)
}) })
@ -271,17 +255,16 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"],
}, },
searchLine: function(event, can, value) { value = value.trim() searchLine: function(event, can, value) { value = value.trim()
can.page.Modify(can, can.ui.search, {style: {display: ""}}) 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.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.onmotion.clear(can, can.ui.tags)
can.onappend.table(can, msg, function(value, key, index, line) { can.onappend.table(can, msg, function(value, key, index, line) {
value = value.replace("<", "&lt;").replace(">", "&gt;"), value = value.replace("./", "") value = value.replace("<", "&lt;").replace(">", "&gt;"), value = value.replace("./", "")
return {text: ["", "td"], list: [{text: [value, "div"]}], onclick: function(event) { return {text: ["", html.TD], list: [{text: [value, html.DIV]}], onclick: function(event) {
line.line && can.onimport.tabview(can, can.Option("path"), line.file.replace("./", ""), parseInt(line.line), function() { line.line && can.onimport.tabview(can, can.Option(nfs.PATH), line.file.replace("./", ""), parseInt(line.line), function() {
can.onaction.selectLine(can, line.line) can.onaction.selectLine(can, line.line)
}) })
}} }}
@ -313,13 +296,13 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"],
favorLine: function(can, value) { favorLine: function(can, value) {
can.user.input(event, can, [ can.user.input(event, can, [
{name: "zone", value: "@key=some"}, {name: "zone", value: "hi"},
{name: "name", value: "@key=some"}, {name: "name", value: "hello"},
], function(event, button, meta, list) { ], function(event, button, meta, list) {
can.run(event, [ctx.ACTION, "favor", can.run(event, [ctx.ACTION, code.FAVOR,
ctx.ACTION, "insert", "zone", meta.zone||"some", ctx.ACTION, mdb.INSERT, kit.MDB_ZONE, meta.zone||"",
"type", can.parse, "name", meta.name||"some", "text", (value||"").trimRight(), kit.MDB_TYPE, can.parse, kit.MDB_NAME, meta.name||"", kit.MDB_TEXT, (value||"").trimRight(),
"path", can.Option("path"), "file", can.Option("file"), "line", can.Option("line"), nfs.PATH, can.Option(nfs.PATH), nfs.FILE, can.Option(nfs.FILE), nfs.LINE, can.Option(nfs.LINE),
], function(msg) { ], function(msg) {
can.user.toast(can, "收藏成功") can.user.toast(can, "收藏成功")
}, true) }, true)
@ -346,12 +329,12 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"],
}) })
Volcanos("onexport", {help: "导出数据", list: ["文件数", "解析器", "文件名", "当前行", "跳转数", "标签数"], Volcanos("onexport", {help: "导出数据", list: ["文件数", "解析器", "文件名", "当前行", "跳转数", "标签数"],
position: function(can, index, total) { total = total || can.max 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) { content: function(can) {
return can.page.Select(can, can.ui.content, "td.text", function(item) { return can.page.Select(can, can.ui.content, "td.text", function(item) {
return item.innerText return item.innerText
}).join("\n")+"\n" }).join(ice.NL)+ice.NL
}, },
}) })

View File

@ -55,7 +55,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
]}, {view: "output"}, ]}, {view: "output"},
]); can.base.Copy(can.ui, ui, "output", "cmd") ]); can.base.Copy(can.ui, ui, "output", "cmd")
}, },
}, ["/plugin/local/code/vimer.css"]) }, [""])
Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"], _init: function(can, mode) { Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"], _init: function(can, mode) {
can.core.List(can.onkeymap.list, function(item) { var engine = {} can.core.List(can.onkeymap.list, function(item) { var engine = {}
can.core.Item(can.onkeymap[item], function(key, cb) { var map = engine can.core.Item(can.onkeymap[item], function(key, cb) { var map = engine

View File

@ -17,7 +17,7 @@ var kit = {
MDB_LIST: "list", MDB_LIST: "list",
} }
var ice = { var ice = {
SP: " ", PT: ".", NL: "\n", SP: " ", PS: "/", PT: ".", NL: "\n",
POD: "pod", CTX: "ctx", CMD: "cmd", ARG: "arg", OPT: "opt", POD: "pod", CTX: "ctx", CMD: "cmd", ARG: "arg", OPT: "opt",
TRUE: "true", TRUE: "true",
@ -78,6 +78,9 @@ var ssh = {
} }
var nfs = { var nfs = {
DIR: "dir", DIR: "dir",
PATH: "path",
FILE: "file",
LINE: "line",
} }
var tcp = { var tcp = {
HOST: "host", HOST: "host",
@ -85,6 +88,8 @@ var tcp = {
var code = { var code = {
WEBPACK: "webpack", WEBPACK: "webpack",
INNER: "inner",
FAVOR: "favor",
} }
var wiki = { var wiki = {
TITLE: "title", BRIEF: "brief", REFER: "refer", SPARK: "spark", 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/path.js",
"/plugin/local/wiki/draw.js", "/plugin/local/wiki/draw.js",
"/plugin/local/wiki/word.js", "/plugin/local/wiki/word.js",
"/plugin/local/team/plan.js",
], ],
}) })
} }