1
0
forked from x/ContextOS

opt volcanos.js

This commit is contained in:
shaoying 2019-12-09 01:45:17 +08:00
parent 40b6b437a4
commit 880cb94dd3
7 changed files with 67 additions and 52 deletions

View File

@ -97,7 +97,8 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心",
}, },
map[string]interface{}{"name": "tail", map[string]interface{}{"name": "tail",
"tmpl": "tail", "scripts": []interface{}{ "tmpl": "tail", "scripts": []interface{}{
"volcanos.js", "toolkit.js", "context.js", "example.js", "chat.js", "toolkit.js", "context.js", "example.js", "chat.js",
"can_proto.js", "can_frame.js",
}, },
}, },
}, },

1
usr/librarys/can_frame.js Symbolic link
View File

@ -0,0 +1 @@
../volcanos/frame.js

1
usr/librarys/can_proto.js Symbolic link
View File

@ -0,0 +1 @@
../volcanos/proto.js

View File

@ -23,7 +23,7 @@ ctx = context = (function(kit) {var ctx = {__proto__: kit,
kit.History("run", -1, option) kit.History("run", -1, option)
this.POST("", option, function(msg) { this.POST("", option, function(msg) {
kit.Log("run", what, "result", msg.result? msg.result[0]: "", msg) kit.Log("run", what, "result", msg.result? msg.result[0]: "", msg)
kit._call(cb, [msg]) typeof cb == "function" && cb(msg)
}, msg), delete(event.msg) }, msg), delete(event.msg)
}), }),
Event: shy("封装事件", {order: 0}, function(event, msg, proto) { Event: shy("封装事件", {order: 0}, function(event, msg, proto) {
@ -163,7 +163,7 @@ ctx = context = (function(kit) {var ctx = {__proto__: kit,
var res = {"result": [xhr.responseText]} var res = {"result": [xhr.responseText]}
} }
kit._call(cb, [msg.Copy(res)]) typeof cb == "function" && cb(msg.Copy(res))
} }
xhr.open("POST", url) xhr.open("POST", url)

View File

@ -684,6 +684,11 @@ function Pane(page, field) {
if (type == "plugin" && line.name || type == "field") { if (type == "plugin" && line.name || type == "field") {
page.Require(line.init? line.group+"/"+line.init: "", function(init) { page.Require(line.init? line.group+"/"+line.init: "", function(init) {
page.Require(line.view? line.group+"/"+line.view: "", function(view) { page.Require(line.view? line.group+"/"+line.view: "", function(view) {
can.user.carte = page.carte.Pane.Show
can.user.toast = page.toast.Pane.Show
line.group == "favor" && can.Plugin(can, ui.item.Meta, function(event, cmds, cbs) {
ctx.Run(event, option.dataset, [line.river, line.storm, line.action].concat(cmds), cbs)
}, ui.item) ||
pane.Plugin(page, pane, ui.item, init, function(event, cmds, cbs) { pane.Plugin(page, pane, ui.item, init, function(event, cmds, cbs) {
kit._call(cb||pane.Core, [event, line, cmds, cbs]) kit._call(cb||pane.Core, [event, line, cmds, cbs])
}) })
@ -987,7 +992,7 @@ function Pane(page, field) {
}, },
} }
var Meta = plugin && plugin.target && plugin.target.Meta || {} var Meta = plugin && plugin.target && plugin.target.Meta || line || {}
kit.Log(["cmd"].concat(kit.List([Meta.river, Meta.storm, Meta.action])).concat(args[0] == "_cmd"? args[1]: args)) kit.Log(["cmd"].concat(kit.List([Meta.river, Meta.storm, Meta.action])).concat(args[0] == "_cmd"? args[1]: args))
page.Status("ncmd", kit.History("cmd", -1, {args: args, meta: Meta})) page.Status("ncmd", kit.History("cmd", -1, {args: args, meta: Meta}))
@ -1030,6 +1035,7 @@ function Pane(page, field) {
kit.Item(pane.Listen, function(key, cb) {page.Sync(key).change(cb)}) kit.Item(pane.Listen, function(key, cb) {page.Sync(key).change(cb)})
return page[name] = field, field.Pane = pane return page[name] = field, field.Pane = pane
} }
function Plugin(page, pane, field, inits, runs) { function Plugin(page, pane, field, inits, runs) {
var option = field.querySelector("form.option") var option = field.querySelector("form.option")
var action = field.querySelector("div.action") var action = field.querySelector("div.action")
@ -1703,39 +1709,3 @@ function Output(plugin, type, msg, cb, target, option) {
return plugin.Outputs[type] = target, target.Output = output return plugin.Outputs[type] = target, target.Output = output
} }
var can = Volcanos("chat", {
Plugin: shy("构造插件", function(can) {}),
Output: shy("构造组件", function(can, plugin, type, msg, cb, target, option) {
type = "table"
var output = Volcanos(type, {
user: can.user, node: can.node,
core: can.core, type: can.type,
oncarte: plugin.oncarte,
run: plugin.run,
size: function(cb) {
plugin.onfigure.meta.size(function(width, height) {
cb(width, height)
})
}
}, [type], function(output) {
target.oncontextmenu = function(event) {
plugin.oncarte(event, shy("", output.onchoice, output.onchoice.list, function(event, value, meta) {
typeof meta[value] == "function"? meta[value](event, can, msg, cb, target, option):
typeof output[value] == "function"? output[value](event, can, msg, cb, target, option):
typeof plugin[value] == "function"? plugin[value](event, can, msg, cb, target, option): null
return true
}))
event.stopPropagation()
event.preventDefault()
return true
}
output.load().onimport.init(output, msg, cb, target, option)
})
kit.Item(output.onaction, function(key, cb) {target[key] = function(event) {
output.onaction(event, can, msg, cb, target, option)
}})
plugin[type] = output, output.target = target, target.Output = output
}),
Input: shy("构造控件", function(can, plugin, type, meta, target, option) {
}),
}, [], function(can) {can.load()})

View File

@ -1 +0,0 @@
../volcanos/volcanos.js

View File

@ -1,17 +1,60 @@
# {{title "Volcanos.js"}} # {{title "Volcanos.js"}}
volcanos是一个前端框架。 volcanos是一个前端框架。
模块化 通过组件化方式设计功能模块,每个模块都是一个独立完整的运行单元。
通过建立脚本的依赖关系,按需加载相关文件,从而更加高效的组织项目文件。 通过插件化方式加载功能模块,每个模块都有框架与输入与输出。
通过模块化方式管理模块依赖,可以动态按需加载各种模块。
{{chart "chain" ` {{chart "chain" `
Volcanos chat
Volcanos proto
Volcanos "ID 生成器"
Volcanos "Log 日志器"
"Conf 配置器"
"Sync 同步器"
"Timer 定时器"
"Event 触发器"
"Dream 构造器"
"Cache 缓存器"
"Story 存储器"
Plugin
Inputs
"onimport 导入数据"
"onaction 控件交互"
"onchoice 控件菜单"
"ondetail 控件详情"
"onexport 导出数据"
Output
"base 基础模块"
"core 核心模块"
"misc 工具模块"
"page 网页模块"
"user 用户模块"
`}} `}}
## {{section "type模块"}} ## {{chapter "原型"}}
## {{section "core模块"}} ### {{section "ID 生成器"}}
## {{section "node模块"}} ### {{section "Log 日志器"}}
## {{section "misc模块"}} ### {{section "Conf 配置器"}}
## {{section "device模块"}} ### {{section "Sync 同步器"}}
### {{section "Timer 定时器"}}
### {{section "Event 触发器"}}
### {{section "Dream 构造器"}}
### {{section "Cache 缓存器"}}
### {{section "Story 存储器"}}
## {{chapter "框架"}}
### {{section "Plugin 插件"}}
### {{section "Inputs 控件"}}
### {{section "Output 组件"}}
## {{chapter "模块"}}
### {{section "base 模块"}}
### {{section "core 模块"}}
### {{section "misc 模块"}}
### {{section "page 模块"}}
### {{section "user 模块"}}