1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 08:48:06 +08:00

opt frame.js

This commit is contained in:
shaoying 2021-01-20 18:35:23 +08:00
parent 0f031c36ef
commit 7ffca63865
12 changed files with 155 additions and 166 deletions

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2019 小营长
Copyright (c) 2019 码神
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -1,4 +1,4 @@
# volcanos
volcanos是一个前端框架通过模块化、集群化、自动化快速的创建、共享应用程序和数据。
volcanos是一个前端框架通过模块化、集群化、自动化快速的创建、共享应用程序和数据。

View File

@ -5,7 +5,7 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta,
pane.onaction && pane.onappend._action(pane, item.action||pane.onaction.list)
pane.Status = pane.Status || function(key, value) { pane.run({}, ["search", "Footer.onimport."+key, value]) }
pane.run = function(event, cmds, cb, silent) { var msg = pane.request(event); cmds = cmds || []
pane.run = function(event, cmds, cb) { var msg = pane.request(event); cmds = cmds || []
return (can.onengine[cmds[0]]||can.onengine[meta.main.engine]||can.onengine.remote)(event, can, msg, pane, cmds, cb)
}, can[item.name] = pane, next()
}, target)
@ -15,13 +15,6 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta,
pane.onaction._init(pane, msg, [], cb, pane._target)
})
},
_daemon: function(can, name, cb) {
can.misc.WSS(can, {type: "chrome", name: name}, cb||function(event, msg, cmd, arg) {
msg && can.run(event, ["search"].concat(msg["detail"]||[]), function(msg) {
msg.Reply()
})
})
},
search: function(event, can, msg, pane, cmds, cb) {
var sub, mod = can, fun = can, key = ""; can.core.List(cmds[1].split("."), function(value) {
@ -39,10 +32,11 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta,
can.misc.Run(event, can, {names: pane._name}, cmds, cb)
pane.run(event, ["search", "Footer.onimport.ncmd"])
}, engine: function(event, can, msg, pane, cmds, cb) { return false },
listen: shy("事件回调", {}, [], function(can, name, cb) {
arguments.callee.meta[name] = (arguments.callee.meta[name]||[]).concat(cb)
}),
signal: shy("事件触发", function(can, name, msg) {
signal: shy("事件触发", function(can, name, msg) { msg = msg || can.request()
can.core.List(can.onengine.listen.meta[name], function(cb) {
can.core.CallFunc(cb, {msg: msg})
})
@ -215,26 +209,26 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
var last = sub._history[sub._history.length-1]; !sub.core.Eq(last, cmds) && cmds[0] != "action" && !slient && sub._history.push(cmds)
return cmds
},
}, list.concat(Volcanos.meta.volcano).concat(Volcanos.meta.libs), function(sub) { sub.Conf(meta)
}, list.concat(Volcanos.meta.volcano, Volcanos.meta.libs), function(sub) { sub.Conf(meta)
meta.feature = sub.base.Obj(meta.feature, {})
sub.page.ClassList.add(sub, field, meta.style||meta.feature.style||"")
typeof cb == "function" && cb(sub)
meta.inputs && sub.onappend._option(sub, meta, sub._option)
typeof cb == "function" && cb(sub)
})
},
_option: function(can, meta, option) { var index = -1, args = can.base.Obj(meta.args||meta.arg, [])
function add(item, next) { item._input != "button" && item.type != "button" && index++
var input = Volcanos(item.name, {_follow: can._follow+"."+item.name,
Volcanos(item.name, {_follow: can._follow+"."+item.name,
_option: can._option, _action: can._action, _output: can._output, _status: can._status,
_target: can.onappend.input(can, item, args[index], option),
Option: can.Option, Action: can.Action, Status: can.Status,
CloneInput: function() { add(item)._target.focus() },
CloneField: function() { can.Clone() },
Option: can.Option, Action: can.Action, Status: can.Status,
}, [item.display||"/plugin/input.js"].concat(Volcanos.meta.volcano).concat(Volcanos.meta.libs), function(input) {
}, [item.display||"/plugin/input.js"].concat(Volcanos.meta.volcano, Volcanos.meta.libs), function(input) {
input.Conf(item), input.sup = can, input.run = function(event, cmds, cb, silent) {
var sub = can.core.Value(can, "_outputs.-1")
if (cmds && cmds[0] == "action" && sub && sub.onaction[cmds[1]]) {
if (sub && cmds && cmds[0] == "action" && sub.onaction[cmds[1]]) {
return sub.onaction[cmds[1]](event, sub)
}
@ -243,37 +237,33 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
}
return can.onappend._output(can, meta, event, can.Pack(cmds, silent), cb, silent)
}
}, can._inputs[item.name] = input
can.onappend.figure(input, item, item.value, input._target)
can.core.Item(input.onaction, function(key, value) {
key.indexOf("on") == 0 && (input._target[key] = input._target[key] || function(event) {
key.indexOf("on") == 0 && !input._target[key] && (input._target[key] = function(event) {
value(event, input)
})
})
}), can.onappend.figure(input, item, item.value, input._target)
input.onaction && input.onaction._init && input.onaction._init(input, item, [], next, input._target)
}); return can._inputs[item.name] = input
can.core.CallFunc([input.onaction, "_init"], [input, item, [], next, input._target])
})
}; can.core.Next(can.base.Obj(meta.inputs, []), add)
},
_action: function(can, list, action, meta) { action = action || can._action, meta = meta || can.onaction
can.core.List(list, function(item) { can.onappend.input(can,
item == ""? /*空白*/ {type: "space"}:
typeof item == "string"? /*按键*/ {type: "button", value: item, onclick: function(event) {
var cb = meta[item] || meta["_engine"] || can.onkeymap && can.onkeymap._remote
typeof cb == "function" && cb(event, can, item)
can.core.List(list, function(item) { can.onappend.input(can, item == ""? /*空白*/ {type: "space"}:
typeof item == "string"? /*按键*/ {type: "button", value: item, onclick: function(event) {
can.core.CallFunc(meta[item]||meta["_engine"], [event, can, item])
}}: item.length > 0? /*列表*/ {type: "select", name: item[0], values: item.slice(1), onchange: function(event) {
var which = item[event.target.selectedIndex+1]
var cb = meta[which]; typeof cb == "function" && cb(event, can, which)
var cb = meta[item[0]]; typeof cb == "function" && cb(event, can, item[0], which)
}}: item.length > 0? /*列表*/ {type: "select", name: item[0], values: item.slice(1), onchange: function(event) {
var which = item[event.target.selectedIndex+1]
can.core.CallFunc(meta[which], [event, can, which])
can.core.CallFunc(meta[item[0]], [event, can, item[0], which])
}}: item.input? /*文本*/ {type: "input", name: item.input[0], onkeydown: function(event) {
item.input[1](event, can)
}}: item.input? /*文本*/ {type: "input", name: item.input[0], onkeydown: function(event) {
can.core.CallFunc(item.input[1], [event, can])
}}: typeof item == "object" && /*其它*/ item
, "", action)
})
}}: typeof item == "object" && /*其它*/ item
, "", action)})
},
_output: function(can, meta, event, cmds, cb, silent) {
var msg = can.request(event); can.page.Select(can, can._output, "div.control .args", function(item) {
@ -285,14 +275,13 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
}
var feature = can.Conf("feature")
var input = cmds && feature && feature[cmds[1]]; if (cmds && cmds[0] == "action" && input) {
var input = cmds && cmds[0] == "action" && feature && feature[cmds[1]]; if (input) {
can.user.input(event, can, input, function(ev, button, data, list) {
cmds = cmds.slice(0, 2), can.core.Item(data, function(key, value) {
key && value && cmds.push(key, value)
})
can.run(event, cmds, function(msg) {
var sub = can.core.Value(can, "_outputs.-1")
can.run(event, cmds, function(msg) { var sub = can.core.Value(can, "_outputs.-1")
if (can.core.CallFunc([sub, "onimport._process"], [sub, msg, cmds, cb])) { return }
if (can.core.CallFunc([can, "onimport._process"], [can, msg, cmds, cb])) { return }
typeof cb == "function" && cb(msg)
@ -302,8 +291,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
return
}
return can.run(event, cmds||[], function(msg) {
var sub = can.core.Value(can, "_outputs.-1")
return can.run(event, cmds, function(msg) { var sub = can.core.Value(can, "_outputs.-1")
if (can.core.CallFunc([sub, "onimport._process"], [sub, msg, cmds, cb])) { return }
if (can.core.CallFunc([can, "onimport._process"], [can, msg, cmds, cb])) { return }
typeof cb == "function" && cb(msg)
@ -311,26 +299,27 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
var display = msg.Option("_display") || meta.display || meta.feature.display || "/plugin/table.js"
var output = Volcanos(display, {_follow: can._follow+"."+display,
Volcanos(display, {_follow: can._follow+"."+display,
_option: can._option, _action: can._action, _output: can._output, _status: can._status,
_target: can._output, _fields: can._target,
Option: can.Option, Action: can.Action, Status: can.Status,
}, [display].concat(Volcanos.meta.volcano).concat(Volcanos.meta.libs), function(table) {
}, [display].concat(Volcanos.meta.volcano, Volcanos.meta.libs), function(table) {
table.Conf(can.Conf()), table.sup = can, table.run = function(event, cmds, cb, silent) {
if (cmds && cmds[0] == "action" && table.onaction[cmds[1]]) {
return table.onaction[cmds[1]](event, table)
}
return can.onappend._output(can, meta, event, can.Pack(cmds, silent), cb, silent)
}, table._msg = msg
}, can._outputs.push(table), table._msg = msg
can.page.Modify(can, can._action, ""), can.page.Modify(can, can._status, "")
table.onimport && table.onimport._init && table.onimport._init(table, msg, msg.result||[], function(msg) {
table.onaction && table.onappend._action(table, msg._action||meta._action||table.onaction.list)
table.ondetail && table.onappend._detail(table, msg._detail||meta._detail||table.ondetail.list)
table.onexport && table.onappend._status(table, msg._export||meta._export||table.onexport.list)
}, can._output)
}); can._outputs.push(output)
}, silent)
})
})
},
_detail: function(can, list, target) { target = target || can._output
list.length > 0 && (target.oncontextmenu = function(event) {
@ -355,18 +344,18 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
}]); return ui.first
},
tree: function(can, list, field, split, cb, target, node) {
node = node || {}; can.core.List(list, function(item) {
node = node || {"": target}; can.core.List(list, function(item) {
item[field] && can.core.List(item[field].split(split), function(value, index, array) {
var last = array.slice(0, index).join(split), name = array.slice(0, index+1).join(split)
node[name] || (node[name] = can.page.Append(can, node[last]||target, [{view: ["item", "div", value+(index==array.length-1?"":split)], onclick: function(event) {
node[name] || (node[name] = can.page.Append(can, node[last], [{view: ["item", "div", value+(index==array.length-1?"":split)], onclick: function(event) {
index < array.length - 1? can.onmotion.toggle(can, node[name]): typeof cb == "function" && cb(event, item)
}}, {view: "list", style: {display: "none"}}]).last)
})
}); return node
},
field: function(can, type, item, target) { type = type || "input", item = item || {}
return can.page.Append(can, target, [{view: [(type||"")+" "+(item.name||"")+" "+(item.pos||""), "fieldset"], list: [
return can.page.Append(can, target||can._output, [{view: [(type||"")+" "+(item.name||"")+" "+(item.pos||""), "fieldset"], list: [
item.pos? undefined: {text: [(item.nick||item.name||"").split(" ")[0]+"("+(item.help||"").split(" ")[0]+")", "legend"]},
{view: ["option", "form"]}, {view: ["action"]}, {view: ["output"]}, {view: ["status"]},
]}])
@ -448,14 +437,15 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
meta.type = meta.type||"story"
can.onappend._init(can, meta, ["/plugin/state.js"], function(sub) {
meta.type == "story" && sub.page.Remove(sub, sub._legend)
typeof cb == "function" && cb(sub, meta)
sub.page.Remove(sub, sub._legend)
}, target||can._output)
},
plugin: function(can, meta, cb, target) { meta = meta || {}
can.run({}, ["action", "command", meta.index], function(msg) { msg.Table(function(value) {
can.onappend._plugin(can, value, meta, cb, target)
}) }, true)
meta.inputs && meta.inputs.length > 0? can.onappend._plugin(can, {meta: meta.meta, list: meta.list}, meta, cb, target):
can.run({}, ["action", "command", meta.index||item.ctx+"."+item.cmd], function(msg) { msg.Table(function(value) {
can.onappend._plugin(can, value, meta, cb, target)
}) }, true)
},
plugins: function(can, meta, cb, target) {
can.onappend.plugin(can, meta, function(sub) {
@ -557,8 +547,6 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _init: function(can, targe
target._keys = can.onkeypop._parse(event, can, "normal", target._keys||[], item)
})
}
target.onkeyup = function(event) {
}
},
_parse: function(event, can, mode, list, target) { list.push(event.key)
can.Status && can.Status("keys", list.join(""))

View File

@ -87,7 +87,7 @@ Volcanos("core", {help: "核心模块",
var can = args["can"]||args[0], msg = args["msg"]||args[1]
func = typeof func == "function"? func: typeof func == "string"? this.Value(mod||can, func):
typeof func == "object" && func.slice? this.Value(func, this.Keys(func.slice(1))): null
typeof func == "object" && func.slice? this.Value(func[0], this.Keys(func.slice(1))): null
if (typeof func != "function") { return }
var cb = args["cb"]

View File

@ -65,6 +65,9 @@ Volcanos("misc", {help: "工具模块", Message: function(event, can) { var msg
for (var i = 0; i < arguments.length; i++) { msg.result.push(arguments[i]) }
return msg._hand = true, msg
},
Length: function() {
return msg.append && msg.append[0] && msg[msg.append[0]] && msg[msg.append[0]].length || 0
},
}
return msg
},

View File

@ -1,21 +1,12 @@
{
"manifest_version": 2,
"name": "volcanos",
"version": "0.0.1",
"name": "volcanos", "version": "0.0.1",
"background": {"page": "/publish/chrome/chrome.html"},
"browser_action": {"default_popup": "/publish/chrome/popup.html"},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["/proto.js",
"/lib/base.js",
"/lib/core.js",
"/lib/misc.js",
"/lib/page.js",
"/lib/user.js",
"/publish/chrome/contexts.js"
]
}
"content_scripts": [{"matches": ["<all_urls>"],
"js": ["/proto.js", "/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js",
"/publish/chrome/contexts.js"
]}
],
"permissions": [
"tabs",

View File

@ -26,9 +26,10 @@ fieldset.Action>div.action div.item.select {
background-color:#2e515f;
}
fieldset.Action div.output {
}
fieldset.Action div.output.tabs {
margin:28px 10px;
padding-bottom:28px;
margin-top:28px;
}
fieldset.Action div.output.flow fieldset.plugin {
float:left;

View File

@ -1,49 +1,38 @@
(function() { const RIVER = "river", STORM = "storm", ACTION = "action"
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
var river = can.Conf(RIVER), storm = can.Conf(STORM)
can.onmotion.clear(can), can.core.Next(msg.Table(), function(value, next) {
value.feature = can.base.Obj(value.feature||value.meta||"{}", {})
value.inputs = can.base.Obj(value.inputs||value.list||"[]", [])
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg) {
var river = can.Conf("river"), storm = can.Conf("storm")
can.onmotion.clear(can), can.core.Next(msg.Table(), function(item, next) {
item.width = parseInt(can.Conf("width")), item.height = parseInt(can.Conf("height"))
item.feature = can.base.Obj(item.feature||item.meta)
item.inputs = can.base.Obj(item.inputs||item.list)
item.type = "plugin"
value.inputs.length == 0? can.run({}, ["action", "command", value.index || value.ctx+"."+value.cmd], function(msg) {
value.feature = can.base.Obj(msg.meta&&msg.meta[0]||"{}", {})
value.inputs = can.base.Obj(msg.list&&msg.list[0]||"[]", [])
can.onimport._plugin(can, target, river, storm, value), next()
}): (can.onimport._plugin(can, target, river, storm, value), next())
can.onappend.plugin(can, item, function(sub, meta) {
can.onimport._plugin(can, river, storm, sub, meta), next()
})
})
},
_plugin: function(can, target, river, storm, value) { value.name = value.name.split(" ")[0]
value.width = parseInt(can.Conf("width")), value.height = parseInt(can.Conf("height"))
value.action = value.id || value.index || value.key+"."+value.name
value.type = "plugin"
// 添加插件
can.onappend._init(can, value, ["/plugin/state.js"], function(plugin) {
plugin._option.dataset.id = value.action, value.target = plugin._target
plugin.run = function(event, cmds, cb, silent) { var msg = plugin.request(event); cmds = cmds || []
return can.run(event, can.onengine[cmds[0]]? cmds: [river, storm, value.action].concat(cmds), function(msg) {
typeof cb == "function" && cb(msg)
}, silent)
}
can.page.Modify(can, plugin._target, {style: {"max-width": value.width}})
can.onengine.listen(can, "action.resize", function(width, height) {
can.page.Modify(can, plugin._target, {style: {"max-width": value.width = width}})
_plugin: function(can, river, storm, sub, item) {
sub.run = function(event, cmds, cb) { var msg = sub.request(event); cmds = cmds || []
return can.run(event, [river, storm, item.id||item.index||item.key+"."+item.name].concat(cmds), function(msg) {
typeof cb == "function" && cb(msg)
})
}, can._plugins = (can._plugins||[]).concat([sub])
can._plugins = (can._plugins||[]).concat([plugin])
can.page.Append(can, can._action, [{view: ["item", "div", value.name], onclick: function(event) {
can.onmotion.select(can, can._output, "fieldset.plugin", value.target)
can.onmotion.select(can, can._action, "div.item", event.target)
}}])
}, target)
can.page.Modify(can, sub._target, {style: {"max-width": item.width}})
can.onengine.listen(can, "action.resize", function(width, height) {
can.page.Modify(can, sub._target, {style: {"max-width": item.width = width}})
})
can.page.Append(can, can._action, [{view: ["item", "div", item.name], onclick: function(event) {
can.onmotion.select(can, can._output, "fieldset.plugin", sub._target)
can.onmotion.select(can, can._action, "div.item", event.target)
}}])
},
_share: function(can, msg, share, cb) {
can.user.title(msg.Option("title"))
_share: function(can, msg, share) {
can.user.topic(can, can.user.Search(can, "topic")||msg.Option("topic")||"white")
can.Conf(RIVER, "_share"), can.Conf(STORM, share)
can.onimport._init(can, msg, [], cb, can._output)
can.user.title(can.user.Search(can, "title")||msg.Option("title"))
can.Conf("river", "_share"), can.Conf("storm", share)
can.onimport._init(can, msg)
},
})
Volcanos("onengine", {help: "解析引擎", list: [],
@ -69,65 +58,55 @@ Volcanos("onengine", {help: "解析引擎", list: [],
})
Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, list, cb, target) {
var share = can.user.Search(can, "share"); if (share) {
can.run({}, ["_share", share], function(msg) { msg.append && msg[msg.append[0]]? can.onimport._share(can, msg, share, cb):
can.run({}, ["_share", share], function(msg) { msg.Length()>0? can.onimport._share(can, msg, share):
can.onengine.engine({}, can, msg, can, [msg.Option("sess.river"), msg.Option("sess.storm")], function(msg) {
can.onimport._share(can, msg, share, cb)
can.onimport._share(can, msg, share)
})
})
}
can.onengine.listen(can, "storm.select", function(msg, river, storm) {
can.page.Cache(can.Conf(RIVER)+"."+can.Conf(STORM), can._action, can._output.scrollTop+1)
can.page.Cache(can.Conf(RIVER)+"."+can.Conf(STORM), can._output, can._output.scrollTop+1)
can.Conf(RIVER, river), can.Conf(STORM, storm) // 转场
var position = can.page.Cache(river+"."+storm, can._action)
var position = can.page.Cache(river+"."+storm, can._output)
if (position) { can._output.scrollTo(0, position-1); return }
can.run({}, [river, storm], function(msg) {
if (msg.append && msg[msg.append[0]] && msg[msg.append[0]].length > 0) {
can.onimport._init(can, msg, list, cb, can._output)
} else {
var msg = can.request({}, {river: river, storm: storm})
can.run(msg._event, ["search", "River.ondetail.添加工具"])
}
})
can.onaction._select(can, msg, river, storm)
})
can.run({}, ["search", "Header.onimport.menu", "action",
["布局", "默认布局", "流动布局", "网格布局", "标签布局", "自由布局"],
], function(event, key) {
can.core.CallFunc(can.onaction[key], {event: event, can: can, key: key})
can.onengine.listen(can, "search", function(msg, word) {
if (word[0] == "*" || word[0] == "plugin") {
can.onexport.plugin(can, msg)
}
})
can._target.ontouchstart = function(event) { can.onengine.signal(can, "action.touch", {}) }
can._target.ontouchstart = function(event) {
can.onengine.signal(can, "action.touch", can.request(event))
}
can.Conf({width: can._output.offsetWidth-33, height: window.innerHeight})
can.onengine.listen(can, "resize", function(width, height) { can.Conf({width: width, height: height})
can.onengine.signal(can, "action.resize", can.request({}, {width: width, height: height}))
})
can.onengine.listen(can, "search", function(msg, word) {
if (word[0] != "*" && word[0] != "plugin") { return }
can.run({}, ["search", "Header.onimport.menu", "action",
["布局", "默认布局", "流动布局", "网格布局", "标签布局", "自由布局"],
], function(event, key) {
can.core.CallFunc([can.onaction, key], {event: event, can: can, key: key})
})
},
_select: function(can, msg, river, storm) {
function key(name) { return can.Conf("river")+"."+can.Conf("storm")+"."+name}
can.page.Cache(key("action"), can._action, can._output.scrollTop+1)
can.page.Cache(key("output"), can._output, can._output.scrollTop+1)
var fields = (msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",")
can.page.Select(can, can._output, "fieldset.plugin>legend", function(item) {
if (item.innerHTML.indexOf(word[1]) == -1) { return }
can.Conf("river", river), can.Conf("storm", storm) // 转场
var position = can.page.Cache(key("output"), can._output)
var position = can.page.Cache(key("action"), can._action)
if (position) { can._output.scrollTo(0, position-1); return }
can.core.List(fields, function(key) {
switch (key) {
case "ctx": msg.Push(key, "web.chat"); break
case "cmd": msg.Push(key, "action"); break
case "type": msg.Push(key, "plugin"); break
case "name": msg.Push(key, item.innerHTML); break
case "text":
msg.Push(key, shy("跳转", function() {
var input = can.page.Select(can, item.parentNode, "input.args")[0]
input && input.focus()
})); break
default: msg.Push(key, "")
}
})
})
can.run({}, [river, storm], function(msg) {
if (msg.Length() > 0) {
can.onimport._init(can, msg)
} else {
var msg = can.request({}, {river: river, storm: storm})
can.run(msg._event, ["search", "River.ondetail.添加工具"])
}
})
},
@ -161,5 +140,25 @@ Volcanos("onexport", {help: "导出数据", list: [],
item.dataset.args = JSON.stringify(list), cb(item, next)
})
},
plugin: function(can, msg) {
var fields = (msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",")
can.page.Select(can, can._output, "fieldset.plugin>legend", function(item) {
if (item.innerHTML.indexOf(word[1]) == -1) { return }
can.core.List(fields, function(key) {
switch (key) {
case "ctx": msg.Push(key, "web.chat"); break
case "cmd": msg.Push(key, "action"); break
case "type": msg.Push(key, "plugin"); break
case "name": msg.Push(key, item.innerHTML); break
case "text":
msg.Push(key, shy("跳转", function() {
var input = can.page.Select(can, item.parentNode, "input.args")[0]
input && input.focus()
})); break
default: msg.Push(key, "")
}
})
})
},
})
})()

View File

@ -36,6 +36,13 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}])
})
},
_daemon: function(can, name, cb) {
can.misc.WSS(can, {type: "chrome", name: name}, cb||function(event, msg, cmd, arg) {
msg && can.run(event, ["search"].concat(msg["detail"]||[]), function(msg) {
msg.Reply()
})
})
},
_state: function(can, msg, target) {
can.core.List(can.Conf(STATE)||["time", USERNAME], function(item) {
can.page.Append(can, target, [{view: ["state "+item, "div", can.Conf(item)],

View File

@ -149,7 +149,7 @@ Volcanos("onaction", {help: "控件交互", list: [],
// can.onimport.project(can, can.Option("path"))
})
},
search: function(event, can) {
searchShow: function(event, can) {
can.page.Toggle(can, can.ui.search, function() {
// can.onaction.searchLine(event, can, "")
})
@ -259,6 +259,9 @@ Volcanos("onaction", {help: "控件交互", list: [],
can.onkeymap && can.onkeymap.selectLine(can, line, item)
})
var pos = can.current.offset()-can.current.line.offsetTop
can.current.scroll(0, -pos)
},
searchLine: function(event, can, value) { value = value.trim()
can.page.Modify(can, can.ui.search, {style: {display: ""}})
@ -273,8 +276,7 @@ Volcanos("onaction", {help: "控件交互", list: [],
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() {
var pos = can.current.offset()-can.current.line.offsetTop
can.current.scroll(0, -pos)
can.onaction.selectLine(can, parseInt(line.line))
})
}}
}, can.ui.tags)

View File

@ -47,6 +47,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _merge: function(can, sub)
},
}, ["/plugin/local/code/vimer.css"])
Volcanos("onaction", {help: "控件交互", list: [],
_engine: function(event, can, key, arg, cb) {
can.onkeymap._remote(event, can, key)
},
save: function(event, can) {
var msg = can.request(event); msg.Option("content", can.onexport.content(can))
can.run(event, ["action", "save", can.parse, can.Option("file"), can.Option("path")], function(msg) {

View File

@ -52,21 +52,16 @@ var Volcanos = shy("火山架", {libs: [], cache: {}}, [], function(name, can, l
return // 加载完成
}
var source = !libs[0].endsWith("/") && (libs[0].indexOf(".") == -1? libs[0]+".js": libs[0]) || libs[0]
// 请求模块
function next() { can._load(source, each), can.require(libs.slice(1), cb, each) }
meta.cache[source]? next(): meta._load(source, next)
function next() { can._load(libs[0], each), can.require(libs.slice(1), cb, each) }
meta.cache[libs[0]]? next(): meta._load(libs[0], next)
},
request: function(event, option) { event = event || {}
event._msg = event._msg || can.misc.Message(event, can)
can.core.Item(option, event._msg.Option)
return event._msg
},
Conf: function(key, value) {
return can.core.Value(can._conf, key, value)
}, _conf: {},
Conf: function(key, value) { return can.core.Value(can._conf, key, value) }, _conf: {},
}
if (_can_name) {