mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 08:48:06 +08:00
opt frame.js
This commit is contained in:
parent
0f031c36ef
commit
7ffca63865
2
LICENSE
2
LICENSE
@ -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
|
||||
|
@ -1,4 +1,4 @@
|
||||
# volcanos
|
||||
|
||||
volcanos是一个前端框架,通过模块化、集群化、自动化、快速的创建、共享应用程序和数据。
|
||||
volcanos是一个前端框架,通过模块化、集群化、自动化,快速的创建、共享应用程序和数据。
|
||||
|
||||
|
82
frame.js
82
frame.js
@ -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"}:
|
||||
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.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)
|
||||
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)
|
||||
can.core.CallFunc(item.input[1], [event, can])
|
||||
|
||||
}}: typeof item == "object" && /*其它*/ item
|
||||
, "", action)
|
||||
})
|
||||
, "", 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,12 +437,13 @@ 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) {
|
||||
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)
|
||||
},
|
||||
@ -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(""))
|
||||
|
@ -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"]
|
||||
|
@ -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
|
||||
},
|
||||
|
@ -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",
|
||||
"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",
|
||||
|
@ -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;
|
||||
|
149
pane/Action.js
149
pane/Action.js
@ -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) {
|
||||
_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)
|
||||
}, silent)
|
||||
}
|
||||
})
|
||||
}, can._plugins = (can._plugins||[]).concat([sub])
|
||||
|
||||
can.page.Modify(can, plugin._target, {style: {"max-width": value.width}})
|
||||
can.page.Modify(can, sub._target, {style: {"max-width": item.width}})
|
||||
can.onengine.listen(can, "action.resize", function(width, height) {
|
||||
can.page.Modify(can, plugin._target, {style: {"max-width": value.width = width}})
|
||||
can.page.Modify(can, sub._target, {style: {"max-width": item.width = width}})
|
||||
})
|
||||
|
||||
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.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)
|
||||
}}])
|
||||
}, 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,66 +58,56 @@ 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.onaction._select(can, msg, river, storm)
|
||||
})
|
||||
|
||||
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.onengine.listen(can, "search", function(msg, word) {
|
||||
if (word[0] == "*" || word[0] == "plugin") {
|
||||
can.onexport.plugin(can, msg)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
can.run({}, ["search", "Header.onimport.menu", "action",
|
||||
["布局", "默认布局", "流动布局", "网格布局", "标签布局", "自由布局"],
|
||||
], function(event, key) {
|
||||
can.core.CallFunc(can.onaction[key], {event: event, can: can, key: key})
|
||||
})
|
||||
can._target.ontouchstart = function(event) {
|
||||
can.onengine.signal(can, "action.touch", can.request(event))
|
||||
}
|
||||
|
||||
can._target.ontouchstart = function(event) { can.onengine.signal(can, "action.touch", {}) }
|
||||
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.添加工具"])
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
"默认布局": function(event, can) {
|
||||
@ -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, "")
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
})
|
||||
})()
|
||||
|
@ -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)],
|
||||
|
@ -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("<", "<").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() {
|
||||
var pos = can.current.offset()-can.current.line.offsetTop
|
||||
can.current.scroll(0, -pos)
|
||||
can.onaction.selectLine(can, parseInt(line.line))
|
||||
})
|
||||
}}
|
||||
}, can.ui.tags)
|
||||
|
@ -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) {
|
||||
|
11
proto.js
11
proto.js
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user