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):
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)
},

View File

@ -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]
}

View File

@ -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 [""]}

View File

@ -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 {

View File

@ -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;
}

View File

@ -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)

View File

@ -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() })
},
})

View File

@ -28,6 +28,5 @@ fieldset.Search div.output div.display {
overflow:auto;
}
fieldset.Search div.output div.profile {
max-height:400px;
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}})
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}})
})
},

View File

@ -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
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("<", "&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
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)
})
@ -274,14 +258,13 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"],
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("<", "&lt;").replace(">", "&gt;"), 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
},
})

View File

@ -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

View File

@ -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",
],
})
}