forked from x/volcanos
opt pane
This commit is contained in:
parent
ea8ac3de57
commit
0752a913b8
20
frame.js
20
frame.js
@ -1,8 +1,6 @@
|
||||
// volcanos: 前端 火山架 我看不行
|
||||
// FMS: a fieldset manager system
|
||||
Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta, list, cb, target) {
|
||||
can.core.Next(meta.panes, function(item, next) {
|
||||
can.onappend._init(can, item, meta.libs.concat(item.list), function(pane) { pane.Conf(item)
|
||||
can.onappend._init(can, item, meta.libs.concat(item.list), function(pane) {
|
||||
pane.run = function(event, cmds, cb) {
|
||||
return (can.onengine[cmds[0]]||can.onengine[meta.main.engine])(event, can, pane.request(event), pane, cmds, cb)
|
||||
}, can[item.name] = pane, next()
|
||||
@ -18,14 +16,7 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta,
|
||||
})
|
||||
})
|
||||
},
|
||||
_merge: function(can, sub) {
|
||||
can.core && can.core.Item(sub, function(key, value) {
|
||||
if (sub.hasOwnProperty(key)) { can.onengine[key] = value }
|
||||
})
|
||||
return true
|
||||
},
|
||||
_daemon: function(can, name) {
|
||||
return
|
||||
_daemon: function(can, name) { return
|
||||
can.misc.WSS(can, "", {type: "chrome", name: name}, function(event, msg) {
|
||||
if (msg.Option("_handle")) { return can.user.toast(can, msg.result.join("")) }
|
||||
can.user.toast(can, msg.detail.join(" "))
|
||||
@ -219,7 +210,8 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta,
|
||||
}},
|
||||
},
|
||||
})
|
||||
Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, list, cb, target, field) { meta.name = meta.name.split(" ")[0]
|
||||
Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, list, cb, target, field) {
|
||||
meta.name = meta.name.split(" ")[0]
|
||||
field = field || can.onappend.field(can, target, meta.type||"plugin", meta).first
|
||||
var legend = can.page.Select(can, field, "legend")[0]
|
||||
var option = can.page.Select(can, field, "form.option")[0]
|
||||
@ -281,13 +273,13 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
||||
}, [Volcanos.meta.volcano].concat(list), function(sub) { cb(sub)
|
||||
meta.feature = sub.base.Obj(meta.feature, {})
|
||||
sub.page.ClassList.add(sub, field, meta.style||meta.feature.style||"")
|
||||
sub.onimport && sub.onimport._init(sub, sub.Conf(meta), list, function() {}, field)
|
||||
// sub.onimport && sub.onimport._init(sub, sub.Conf(meta), list, function() {}, field)
|
||||
|
||||
meta.inputs && sub.onappend._option(sub, meta, list, cb)
|
||||
sub.onaction && sub.onappend._action(sub, sub._action, meta.button || sub.onaction.list)
|
||||
sub.onexport && sub.onappend._status(sub, sub._status, sub.onexport.list)
|
||||
})
|
||||
return sub
|
||||
return sub.Conf(meta), sub
|
||||
},
|
||||
_option: function(can, meta, list, cb) { var index = -1, args = can.base.Obj(meta.arg||meta.args, [])
|
||||
function add(item, next) { item._input != "button" && index++
|
||||
|
13
lib/core.js
13
lib/core.js
@ -150,6 +150,19 @@ var core = Volcanos("core", {help: "核心模块",
|
||||
return true
|
||||
}
|
||||
return obj === other
|
||||
},
|
||||
|
||||
Timer: shy("定时器, value, [1,2,3,4], {value, length}", function(interval, cb, cbs) {
|
||||
interval = typeof interval == "object"? interval || []: [interval]
|
||||
var timer = {stop: false}; function loop(timer, i) {
|
||||
if (timer.stop || i >= interval.length && interval.length >= 0) {
|
||||
return typeof cbs == "function" && cbs(timer, interval)
|
||||
}
|
||||
return typeof cb == "function" && cb(timer, interval.value||interval[i], i, interval)?
|
||||
typeof cbs == "function" && cbs(timer, interval): setTimeout(function() { loop(timer, i+1) }, interval.value||interval[i+1])
|
||||
}
|
||||
setTimeout(function() { loop(timer, 0) }, interval.value||interval[0])
|
||||
return timer
|
||||
}),
|
||||
})
|
||||
|
||||
|
128
pane/Action.js
128
pane/Action.js
@ -1,112 +1,44 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb, target) {
|
||||
typeof cb == "function" && cb()
|
||||
},
|
||||
})
|
||||
Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, list, cb, target) {
|
||||
can.onexport._init(can, msg, list, cb, target)
|
||||
},
|
||||
|
||||
_process: function(can, sub, conf, msg, cmds, cb, silent) {
|
||||
var p = can.onaction[msg.Option("_process")]
|
||||
typeof p == "function"? p(can, sub, conf, msg, cmds, cb, silent): typeof cb == "function" && cb(msg)
|
||||
can.run(msg._event, ["search", "Footer.onaction.ncmd"])
|
||||
},
|
||||
_progress: function(can, sub, conf, msg, cmds, cb, silent) {
|
||||
var size = msg.Append("size") || msg.Append("count")
|
||||
if (size != "" && size == msg.Append("total")) {
|
||||
return typeof cb == "function" && cb(msg)
|
||||
}
|
||||
can.user.toast(can, {
|
||||
width: 400,
|
||||
title: conf.name+" "+msg.Append("step")+"% ", duration: 1100,
|
||||
text: "执行进度: "+can.base.Size(size||0)+"/"+can.base.Size(msg.Append("total")||"1000")+"\n"+msg.Append("name"),
|
||||
progress: parseInt(msg.Append("step")),
|
||||
})
|
||||
can.page.Select(can, sub._output, "td", function(td) {
|
||||
if (td.innerText == msg.Option("name")) {
|
||||
can.page.ClassList.add(can, td, "done")
|
||||
}
|
||||
})
|
||||
can.Timer(1000, function() {
|
||||
var res = sub.request({})
|
||||
res.Option("_progress", msg.Option("_progress"))
|
||||
sub.run(res._event, cmds, cb, silent)
|
||||
})
|
||||
},
|
||||
add_plugin: function(can, river, storm, value) { value.name = value.name.split(" ")[0]
|
||||
value.action = value.id || value.index || value.key+"."+value.name
|
||||
value.height = can._target.offsetHeight
|
||||
value.width = can._target.offsetWidth
|
||||
|
||||
can.onappend._init(can, value, Volcanos.meta.libs.concat(["/plugin/state.js"]), function(sub) {
|
||||
sub._legend.onclick = function(event) {
|
||||
var opt = {pod: can.user.Search(can, "pod"), river: river, storm: storm, active: value.name}
|
||||
can.core.Item(sub.Option(), function(key, value) { opt[key] = value })
|
||||
location.href = can.user.Share(can, opt, true)
|
||||
}
|
||||
sub.run = function(event, cmds, cb, silent) { var msg = can.request(event); cmds = cmds || []
|
||||
can.Conf("active", sub.Option())
|
||||
can.Conf("action", value.name)
|
||||
can.Conf("current", sub)
|
||||
// 插件回调
|
||||
return can.run(event, can.onengine[cmds[0]]? cmds: [river, storm, value.action].concat(cmds), function(msg) {
|
||||
// return typeof cb == "function" && cb(msg)
|
||||
can.onaction._process(can, sub, value, msg, cmds, cb, silent)
|
||||
}, silent)
|
||||
}
|
||||
sub._target.oncontextmenu = function(event) {
|
||||
can.user.carte(can, can.ondetail, can.ondetail.list, function(event, item, meta) {
|
||||
// 菜单命令
|
||||
meta[item] && meta[item](event, can, value, sub)
|
||||
})
|
||||
}
|
||||
}, can._output)
|
||||
},
|
||||
})
|
||||
Volcanos("ondetail", {help: "交互菜单", list: ["共享", "更名", "删除"],
|
||||
"共享": function(event, can, value, sub) { var msg = sub.request(event)
|
||||
var list = [can.Conf("river"), can.Conf("storm"), "share", value.name, value.help]
|
||||
list = list.concat([
|
||||
value.pod||can.user.Search(can, "pod")||"", value.group||"", value.index, JSON.stringify(can.core.Item(sub.Option(), function(key, value) { return value })),
|
||||
JSON.stringify(sub.Option())
|
||||
])
|
||||
can.user.share(can, msg, list)
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg, list, cb, target) { var key = "action"
|
||||
can.Cache(can.Conf("river")+"."+can.Conf("storm"), can._output, can._output.scrollTop+1)
|
||||
var river = can.Conf("river", msg.Option("river")), storm = can.Conf("storm", msg.Option("storm")||"main")
|
||||
var position = can.Conf(key, msg.Option(key, can.Cache(river+"."+storm, can._output)||""))
|
||||
if (position) { can._output.scrollTo(0, position-1); return }
|
||||
|
||||
msg.Clear("option"), can.run(msg._event, [river, storm], function(sup) { can._output.innerHTML = ""
|
||||
can.core.Next(sup.Table(), function(value, next) {
|
||||
value.feature = can.base.Obj(value.feature||value.meta||"{}", [])
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||
var river = can.Conf("river"), storm = can.Conf("storm")
|
||||
can._output.innerHTML = "", 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||"[]", [])
|
||||
if (value.inputs.length > 0) {
|
||||
can.onaction.add_plugin(can, river, storm, value), next()
|
||||
can.onimport._plugin(can, river, storm, value), next()
|
||||
return
|
||||
}
|
||||
|
||||
value.index && can.run({}, ["action", "command", value.index], function(msg) {
|
||||
value.feature = can.base.Obj(msg.meta&&msg.meta[0]||"{}", {})
|
||||
value.inputs = can.base.Obj(msg.list&&msg.list[0]||"[]", [])
|
||||
can.onaction.add_plugin(can, river, storm, value), next()
|
||||
})
|
||||
can.onimport._plugin(can, river, storm, value), next()
|
||||
})
|
||||
})
|
||||
typeof cb == "function" && cb(msg)
|
||||
},
|
||||
key: function(can, msg) { msg.Option("active", can.Conf("action"))
|
||||
can.core.Item(can.Conf("active"), msg.Option)
|
||||
can.core.List(can.Conf("current")._outputs, function(item) {
|
||||
item.onexport && item.onexport.key && item.onexport.key(item, msg)
|
||||
})
|
||||
},
|
||||
left: function(can) {
|
||||
return can._target.offsetLeft
|
||||
},
|
||||
top: function(can) {
|
||||
return can._target.offsetTop
|
||||
_plugin: function(can, river, storm, value) { value.name = value.name.split(" ")[0]
|
||||
value.action = value.id || value.index || value.key+"."+value.name
|
||||
value.width = can._target.offsetWidth
|
||||
|
||||
can.onappend._init(can, value, Volcanos.meta.libs.concat(["/plugin/state.js"]), function(sub) {
|
||||
sub.run = function(event, cmds, cb, silent) { var msg = can.request(event); cmds = cmds || []
|
||||
return can.run(event, can.onengine[cmds[0]]? cmds: [river, storm, value.action].concat(cmds), function(msg) {
|
||||
return typeof cb == "function" && cb(msg)
|
||||
}, silent)
|
||||
}
|
||||
}, can._output)
|
||||
},
|
||||
})
|
||||
Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, list, cb, target) {
|
||||
can.Cache(can.Conf("river")+"."+can.Conf("storm"), can._output, can._output.scrollTop+1)
|
||||
var river = can.Conf("river", msg.Option("river")), storm = can.Conf("storm", msg.Option("storm"))
|
||||
var position = can.Conf("action", msg.Option("action", can.Cache(river+"."+storm, can._output)||""))
|
||||
if (position) { can._output.scrollTo(0, position-1); return }
|
||||
|
||||
msg.Clear("option"), can.run(msg._event, [river, storm], function(sup) {
|
||||
can.onimport._init(can, msg, list, cb, target)
|
||||
})
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: []})
|
||||
|
||||
|
@ -1,8 +1,27 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb, target) {
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||
can._output.innerHTML = ""
|
||||
can.onimport._title(can, msg)
|
||||
can.onimport._state(can, msg)
|
||||
typeof cb == "function" && cb()
|
||||
},
|
||||
_title: function(can, msg) {
|
||||
can.core.List(msg.result, function(title) {
|
||||
can.page.Append(can, can._output, [{view: ["title", "div", title]}])
|
||||
})
|
||||
},
|
||||
_state: function(can, msg) {
|
||||
can.core.List(can.Conf("state"), function(item) {
|
||||
can.page.Append(can, can._output, [{view: ["state "+item, "div", can.Conf(item)],
|
||||
list: [{text: item}, {text: ": "}, {text: [can.Conf(item)||"", "span", item]}],
|
||||
click: function(event) { can.onaction[item](event, can, item) },
|
||||
}])
|
||||
})
|
||||
},
|
||||
})
|
||||
Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||
can.onexport._init(can, msg, list, cb, target)
|
||||
can.run({}, [], function(msg) {
|
||||
can.onimport._init(can, msg, list, cb, target)
|
||||
})
|
||||
},
|
||||
ncmd: function(can, msg, list, cb, target) {
|
||||
can.page.Select(can, can._target, "span.ncmd", function(item) {
|
||||
@ -10,19 +29,5 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
|
||||
})
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||
can.run({}, [], function(msg) { can._output.innerHTML = ""
|
||||
can.core.List(msg.result, function(title) {
|
||||
can.page.Append(can, can._output, [{view: ["title", "div", title]}])
|
||||
})
|
||||
|
||||
can.core.List(can.Conf("state"), function(item) {
|
||||
can.page.Append(can, can._output, [{view: ["state "+item, "div", can.Conf(item)],
|
||||
list: [{text: item}, {text: ": "}, {text: [can.Conf(item)||"", "span", item]}],
|
||||
click: function(event) { can.onaction[item](event, can, item) },
|
||||
}])
|
||||
})
|
||||
})
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: []})
|
||||
|
||||
|
155
pane/Header.js
155
pane/Header.js
@ -1,7 +1,57 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb, target) {
|
||||
can.user.isWeiXin && can.onimport.weixin(can)
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||
can._output.innerHTML = ""
|
||||
can.onimport._title(can, msg)
|
||||
can.onimport._state(can, msg)
|
||||
can.onimport._search(can, msg)
|
||||
can.onimport._agent(can, msg)
|
||||
typeof cb == "function" && cb()
|
||||
},
|
||||
weixin: function(can) { can.run({}, ["action", "wx"], function(msg) {
|
||||
_title: function(can, msg) {
|
||||
can.user.title(can.user.Search(can, "title") || can.user.Search(can, "pod"))
|
||||
can.user.isMobile || can.core.List(msg.result||["github.com/shylinux/contexts"], function(title) {
|
||||
can.page.Append(can, can._output, [{view: ["title", "div", title],
|
||||
click: function(event) { can.onaction["title"](event, can, "title") },
|
||||
}])
|
||||
})
|
||||
},
|
||||
_search: function(can, msg) {
|
||||
can.user.isMobile || (can.search = can.page.Append(can, can._output, [{view: "search", list: [{type: "input", data: {placeholder: "search"}, onkeydown: function(event) {
|
||||
switch (event.key) {
|
||||
case "Enter": can.run(event, ["search", "Search.onimport.input", "*", event.target.value]); break
|
||||
}
|
||||
}, }], }]).input)
|
||||
|
||||
var ui = can.page.Append(can, can._output, can.core.List(can.user.isMobile || can.user.isExtension || can.user.Search(can, "pod")? ["River"]: ["pack"], function(item) {
|
||||
return {view: "item", list: [{type: "input", data: {type: "button", name: item, value: item.toLowerCase()}, onclick: function(event) {
|
||||
var cb = can.onaction[item]; typeof cb == "function" && cb(event, can, item)
|
||||
}, }]}
|
||||
}))
|
||||
},
|
||||
_state: function(can, msg) {
|
||||
can.core.List(can.Conf("state")||["time", USERNAME], function(item) {
|
||||
can.page.Append(can, can._output, [{view: ["state "+item, "div", can.Conf(item)],
|
||||
click: function(event) { can.onaction[item](event, can, item) },
|
||||
_init: function(target) {
|
||||
item == "time" && can.core.Timer({interval: 1000, length: -1}, function(event) {
|
||||
can.onimport.time(can, target)
|
||||
})
|
||||
},
|
||||
}])
|
||||
})
|
||||
},
|
||||
_agent: function(can, msg) {
|
||||
if (can.user.isExtension) {
|
||||
can.onaction.River({}, can)
|
||||
} else if (can.user.isMobile) {
|
||||
can.onaction.River({}, can)
|
||||
can.onaction.Footer({}, can)
|
||||
} else if (can.user.Search(can, "pod")) {
|
||||
can.onaction.River({}, can)
|
||||
can.onaction.Footer({}, can)
|
||||
}
|
||||
can.user.isWeiXin && can.onimport._weixin(can)
|
||||
},
|
||||
_weixin: function(can, msg) { can.run({}, ["action", "wx"], function(msg) {
|
||||
can.require(["https://res.wx.qq.com/open/js/jweixin-1.6.0.js"], function(can) {
|
||||
can.user.agent = { __proto__: can.user.agent,
|
||||
getLocation: function(cb) { wx.getLocation({type: "gcj02", success: function (res) {
|
||||
@ -26,18 +76,33 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta,
|
||||
})
|
||||
}) })
|
||||
},
|
||||
|
||||
time: function(can, target) {
|
||||
target.innerHTML = can.base.Time(null, "%w %H:%M:%S")
|
||||
|
||||
if (can.user.Search(can, "topic")) { return }
|
||||
if (can.user.Search(can, "pod")) { return }
|
||||
|
||||
var h = parseInt(can.base.Time(null, "%H"))
|
||||
var topic = h<7 || h>17? "black": "white"
|
||||
can.onaction[topic]({}, can, topic)
|
||||
},
|
||||
})
|
||||
Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||
function init() { can.run({}, [], function(msg) {
|
||||
can.onexport._init(can, msg, msg.append, function() {
|
||||
const USERNAME = "username"
|
||||
can.Conf(USERNAME, msg.Option("user.nick")||msg.Option("user.name"))
|
||||
can.Conf(USERNAME).length > 10 && can.Conf(USERNAME, can.Conf(USERNAME).slice(0, 10))
|
||||
|
||||
can.onimport._init(can, msg, msg.append, function() {
|
||||
can.run({}, ["search", "River.onaction._init"])
|
||||
can.run({}, ["search", "Footer.onaction._init"])
|
||||
}, target)
|
||||
}) }
|
||||
|
||||
can.user.title(can.user.Search(can, "title"))
|
||||
can.page.Modify(can, document.body, {className:
|
||||
can.user.Search(can, "topic") || (can.user.Search(can, "pod") || can.base.isNight() ? "black": "white")})
|
||||
can.page.Modify(can, target, {
|
||||
className: can.user.Search(can, "topic") || (can.user.Search(can, "pod") || can.base.isNight() ? "black": "white"),
|
||||
})
|
||||
|
||||
location.protocol == "file:"? init(): can.run({}, ["check"], function(msg) {
|
||||
msg.Result()? init(): can.user.login(can, init)
|
||||
@ -49,18 +114,19 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
|
||||
})
|
||||
location.href = can.user.Share(can, args, true)
|
||||
},
|
||||
white: function(event, can, key) {
|
||||
can.page.Modify(can, document.body, {className: key})
|
||||
},
|
||||
black: function(event, can, key) {
|
||||
can.page.Modify(can, document.body, {className: key})
|
||||
},
|
||||
username: function(event, can, key) {
|
||||
if (can.user.confirm("logout?")) {
|
||||
can.user.Cookie(can, "sessid", "")
|
||||
can.user.reload(true)
|
||||
}
|
||||
},
|
||||
|
||||
white: function(event, can, key) {
|
||||
can.page.Modify(can, document.body, {className: key})
|
||||
},
|
||||
black: function(event, can, key) {
|
||||
can.page.Modify(can, document.body, {className: key})
|
||||
},
|
||||
pack: function(event, can, key) {
|
||||
can.core.Item(Volcanos.meta.pack, function(key, msg) {
|
||||
delete(msg._event), delete(msg._can)
|
||||
@ -87,66 +153,5 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
|
||||
})
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||
const USERNAME = "username"
|
||||
can.Conf(USERNAME, msg.Option("user.nick")||msg.Option("user.name"))
|
||||
can.Conf(USERNAME).length > 10 && can.Conf(USERNAME, can.Conf(USERNAME).slice(0, 10))
|
||||
can._output.innerHTML = ""
|
||||
|
||||
// 标题
|
||||
can.user.title(can.user.Search(can, "pod"))
|
||||
can.user.isMobile || can.core.List(msg.result||["github.com/shylinux/contexts"], function(title) {
|
||||
can.page.Append(can, can._output, [{view: ["title", "div", title],
|
||||
click: function(event) { can.onaction["title"](event, can, "title") },
|
||||
}])
|
||||
})
|
||||
|
||||
// 状态
|
||||
can.core.List(can.Conf("state")||["time", USERNAME], function(item) {
|
||||
can.page.Append(can, can._output, [{view: ["state "+item, "div", can.Conf(item)],
|
||||
click: function(event) { can.onaction[item](event, can, item) },
|
||||
}])
|
||||
})
|
||||
can.page.Select(can, can._output, "div.state.time", function(item) {
|
||||
can.timer = can.Timer({interval: 1000, length: -1}, function(event) {
|
||||
can.onexport.time(event, can, "time", item)
|
||||
})
|
||||
})
|
||||
|
||||
// 搜索
|
||||
can.user.isMobile || (can.search = can.page.Append(can, can._output, [{view: "search", list: [{type: "input", data: {placeholder: "search"}, onkeydown: function(event) {
|
||||
switch (event.key) {
|
||||
case "Enter": can.run(event, ["search", "Search.onimport.input", "*", event.target.value]); break
|
||||
}
|
||||
}, }], }]).input)
|
||||
|
||||
var ui = can.page.Append(can, can._output, can.core.List(can.user.isMobile || can.user.isExtension || can.user.Search(can, "pod")? ["River"]: ["pack"], function(item) {
|
||||
return {view: "item", list: [{type: "input", data: {type: "button", name: item, value: item.toLowerCase()}, onclick: function(event) {
|
||||
var cb = can.onaction[item]; typeof cb == "function" && cb(event, can, item)
|
||||
}, }]}
|
||||
}))
|
||||
|
||||
// 场景
|
||||
if (can.user.isExtension) {
|
||||
can.onaction.River({}, can)
|
||||
} else if (can.user.isMobile) {
|
||||
can.onaction.River({}, can)
|
||||
can.onaction.Footer({}, can)
|
||||
} else if (can.user.Search(can, "pod")) {
|
||||
can.onaction.River({}, can)
|
||||
can.onaction.Footer({}, can)
|
||||
}
|
||||
|
||||
typeof cb == "function" && cb()
|
||||
},
|
||||
time: function(event, can, key, target) {
|
||||
target.innerHTML = can.base.Time(null, "%w %H:%M:%S")
|
||||
|
||||
if (can.user.Search(can, "pod")) { return }
|
||||
if (can.user.Search(can, "topic")) { return }
|
||||
var h = parseInt(can.base.Time(null, "%H"))
|
||||
var topic = h < 7 || h > 17? "black": "white"
|
||||
can.onaction[topic]({}, can, topic)
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: []})
|
||||
|
||||
|
205
pane/River.js
205
pane/River.js
@ -1,78 +1,66 @@
|
||||
const RIVER = "river", STORM = "storm"
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb, target) {
|
||||
can.sublist = {}
|
||||
},
|
||||
river: function(can) {
|
||||
can._main_river = can.user.Search(can, RIVER) || (can.user.isMobile? "product": "project")
|
||||
can._main_storm = can.user.Search(can, STORM) || (can.user.isMobile? "office": "studio")
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||
can._main_river = can.user.Search(can, RIVER) || (can.user.isExtension || can.user.isMobile? "product": "project")
|
||||
can._main_storm = can.user.Search(can, STORM) || (can.user.isExtension || can.user.isMobile? "office": "studio")
|
||||
|
||||
can._main_river = can.user.Search(can, RIVER) || (can.user.isExtension? "product": "project")
|
||||
can._main_storm = can.user.Search(can, STORM) || (can.user.isExtension? "chrome": "studio")
|
||||
can._output.innerHTML = "", can.sublist = {}
|
||||
|
||||
can.run({}, [], function(sup) {
|
||||
can._output.innerHTML = ""; var select;
|
||||
sup.Table(function(value, index, array) {
|
||||
var view = can.onappend.item(can, can._output, "item", value, function(event, item) { var msg = can.request(event, {_msg: sup})
|
||||
var select; msg.Table(function(value, index, array) {
|
||||
var view = can.onappend.item(can, can._output, "item", value, function(event, item) {
|
||||
// 左键点击
|
||||
can.onimport.storm(event, can, value.hash)
|
||||
}, function(event) {
|
||||
// 右键点击
|
||||
can.onappend.menu(can, sup, value)
|
||||
can.onappend.menu(can, msg, value)
|
||||
})
|
||||
|
||||
if (index == 0 || [value.hash, value.name].indexOf(can._main_river) > -1) { select = view }
|
||||
});
|
||||
select && select.click(), typeof cb == "function" && cb(sup)
|
||||
})
|
||||
}), select && select.click()
|
||||
|
||||
typeof cb == "function" && cb(msg)
|
||||
},
|
||||
storm: function(event, can, river) {
|
||||
var list = can.sublist[river]; if (list) { var hide = list.style.display == "none"
|
||||
return can.page.Modify(can, list, {style: {display: hide? "": "none"}})
|
||||
var list = can.sublist[river]; if (list) {
|
||||
return can.page.Modify(can, list, {style: {display: list.style.display == "none"? "": "none"}})
|
||||
}
|
||||
|
||||
can.run({}, [river, "tool"], function(msg) { var which = 0
|
||||
list = can.page.Append(can, can._output, [{view: "sublist", list: msg.Table(function(storm, index) {
|
||||
river == can._main_river && storm.hash == can._main_storm && (which = index)
|
||||
can.run({}, [river, "tool"], function(msg) {
|
||||
var select = 0; list = can.page.Append(can, can._output, [{view: "sublist", list: msg.Table(function(storm, index) {
|
||||
river == can._main_river && storm.hash == can._main_storm && (select = index)
|
||||
|
||||
return {text: [storm.name, "div", "subitem"], onclick: function(event) {
|
||||
// 左键点击
|
||||
var msg = can.request(event)
|
||||
msg.Option(RIVER, can.Conf(RIVER, river))
|
||||
msg.Option(STORM, can.Conf(STORM, storm.hash))
|
||||
can.run(event, ["search", "Action.onaction._init"])
|
||||
|
||||
can.onimport.action(event, can, river, storm.hash)
|
||||
storm.name != "main" && can.user.title(can.user.Search(can, "pod") || storm.name)
|
||||
can.page.Select(can, can._output, "div.subitem.select", function(item) {
|
||||
can.page.ClassList.del(can, item, "select")
|
||||
}), can.page.ClassList.add(can, event.target, "select")
|
||||
}, oncontextmenu: function(event) {
|
||||
// 右键点击
|
||||
can.user.carte(can, {}, ["添加工具", "重命名", "保存参数", "共享应用", "删除应用"], function(ev, item, meta) {
|
||||
switch (item) {
|
||||
case "重命名":
|
||||
can.user.input(event, can, ["name"], function(event, button, meta, list) {
|
||||
var msg = can.request(event); msg.Option("hash", storm.hash)
|
||||
can.run(event, [river, "tool", "action", "modify", "name", meta.name], function(msg) {
|
||||
can.user.Search(can, {river: can.Conf(RIVER), storm: can.Conf(STORM)})
|
||||
})
|
||||
return true
|
||||
})
|
||||
break
|
||||
default:
|
||||
can.user.carte(can, {}, ["添加工具", "保存参数", "重命名应用", "删除应用"], function(ev, item, meta) {
|
||||
can.ondetail[item](event, can, item, storm)
|
||||
}
|
||||
})
|
||||
}}
|
||||
})}]).sublist
|
||||
which < list.children.length && list.children[which].click()
|
||||
}) }]).sublist, select < list.children.length && list.children[select].click()
|
||||
|
||||
event.target.nextSibling && can._output.insertBefore(list, event.target.nextSibling)
|
||||
can.sublist[river] = list
|
||||
})
|
||||
},
|
||||
action: function(event, can, river, storm) {
|
||||
var msg = can.request(event)
|
||||
msg.Option(RIVER, can.Conf(RIVER, river))
|
||||
msg.Option(STORM, can.Conf(STORM, storm))
|
||||
can.run(event, ["search", "Action.onaction._init"])
|
||||
|
||||
can.page.Select(can, can._output, "div.subitem.select", function(item) {
|
||||
can.page.ClassList.del(can, item, "select")
|
||||
}), can.page.ClassList.add(can, event.target, "select")
|
||||
},
|
||||
})
|
||||
Volcanos("onaction", {help: "控件交互", list: ["创建", "刷新"], _init: function(can, msg, list, cb, target) {
|
||||
can.onimport.river(can)
|
||||
can.run({}, [], function(msg) {
|
||||
can.onimport._init(can, msg, list, cb, target)
|
||||
})
|
||||
},
|
||||
create: function(can) {
|
||||
create: function(event, can) {
|
||||
can.user.input(event, can, [
|
||||
["类型", "public", "protected", "private"],
|
||||
{_input: "text", name: "群名", value: "hi"},
|
||||
@ -81,15 +69,60 @@ Volcanos("onaction", {help: "控件交互", list: ["创建", "刷新"], _init: f
|
||||
can.run(event, ["action", "create"].concat(["type", list[0], "name", list[1], "text", list[2]]), function(msg) {
|
||||
can.user.Search(can, {river: msg.Result()})
|
||||
})
|
||||
return true
|
||||
})
|
||||
},
|
||||
"创建": function(event, can) { can.onaction.create(can) },
|
||||
|
||||
"创建": function(event, can) { can.onaction.create(event, can) },
|
||||
"刷新": function(event, can) { can.user.Search(can, {river: can.Conf(RIVER), storm: can.Conf(STORM)}) },
|
||||
})
|
||||
Volcanos("ondetail", {help: "菜单交互", list: ["添加应用", "添加设备", "添加用户", "重命名", "共享群组", "删除群组"], _init: function(can, msg, list, cb, target) {
|
||||
can.onexport._init(can, msg, list, cb, target)
|
||||
Volcanos("ondetail", {help: "菜单交互", list: ["添加用户", "添加设备", "添加应用", "重命名群组", "删除群组"],
|
||||
"添加用户": function(event, can, river, button) {
|
||||
can.run(event, ["search", "Search.onimport.select", "user", "", ""], function(list) {
|
||||
can.core.Next(list, function(item, next) {
|
||||
can.run({}, [can.Conf(RIVER), "user", "action", "insert", "username", item[5]], function(msg) {
|
||||
next()
|
||||
})
|
||||
}, function() {
|
||||
can.user.toast(can, "添加成功")
|
||||
})
|
||||
})
|
||||
},
|
||||
"添加设备": function(event, can, value) {
|
||||
can.run(event, ["search", "Search.onimport.select", "space", "", ""], function(list) {
|
||||
can.core.Next(list, function(item, next) {
|
||||
can.run({}, [can.Conf(RIVER), "node", "action", "insert", "type", item[3], "name", item[4]], function(msg) {
|
||||
next()
|
||||
})
|
||||
}, function() {
|
||||
can.user.toast(can, "添加成功")
|
||||
})
|
||||
})
|
||||
},
|
||||
"添加应用": function(event, can, river, button) {
|
||||
can.user.input(event, can, [
|
||||
["类型", "public", "protected", "private"],
|
||||
{_input: "text", name: "名称", value: "hi"},
|
||||
{_input: "text", name: "简介", value: "hello"},
|
||||
], function(event, button, meta, list) {
|
||||
can.run(event, [can.Conf(RIVER), "tool", "action", "create"].concat(["type", list[0], "name", list[1], "text", list[2]]), function(msg) {
|
||||
can.user.Search(can, {river: can.Conf(RIVER), storm: msg.Result()})
|
||||
})
|
||||
})
|
||||
},
|
||||
"重命名群组": function(event, can, river, button) {
|
||||
can.user.input(event, can, ["name"], function(event, button, meta, list) {
|
||||
var msg = can.request(event); msg.Option("hash", river.hash)
|
||||
can.run(event, ["action", "modify", "name", meta.name], function(msg) {
|
||||
can.user.Search(can, {river: can.Conf(RIVER)})
|
||||
})
|
||||
})
|
||||
},
|
||||
"删除群组": function(event, can, river, button) {
|
||||
can.run(event, ["remove", "hash", river.hash], function(msg) {
|
||||
can.user.Search(can, {})
|
||||
})
|
||||
},
|
||||
|
||||
"添加工具": function(event, can, button, storm) {
|
||||
can.run(event, ["search", "Search.onimport.select", "command", "", ""], function(list) {
|
||||
can.core.Next(list, function(item, next) {
|
||||
@ -97,7 +130,7 @@ Volcanos("ondetail", {help: "菜单交互", list: ["添加应用", "添加设备
|
||||
next()
|
||||
})
|
||||
}, function() {
|
||||
can.user.Search(can, {river: can.Conf(RIVER), storm: can.Conf(STORM)})
|
||||
// can.user.Search(can, {river: can.Conf(RIVER), storm: can.Conf(STORM)})
|
||||
})
|
||||
})
|
||||
},
|
||||
@ -113,6 +146,21 @@ Volcanos("ondetail", {help: "菜单交互", list: ["添加应用", "添加设备
|
||||
can.user.toast(can, "保存成功", STORM)
|
||||
})
|
||||
},
|
||||
"重命名应用": function(event, can, button, storm) {
|
||||
can.user.input(event, can, ["name"], function(event, button, meta, list) {
|
||||
var msg = can.request(event); msg.Option("hash", storm.hash)
|
||||
can.run(event, [can.Conf(RIVER), "tool", "action", "modify", "name", meta.name], function(msg) {
|
||||
can.user.Search(can, {river: can.Conf(RIVER), storm: can.Conf(STORM)})
|
||||
})
|
||||
})
|
||||
},
|
||||
"删除应用": function(event, can, button, storm) {
|
||||
var msg = can.request(event); msg.Option("hash", storm.hash)
|
||||
can.run(event, [can.Conf(RIVER), "tool", "action", "remove"], function(msg) {
|
||||
can.user.Search(can, {river: can.Conf(RIVER)})
|
||||
})
|
||||
},
|
||||
|
||||
"共享应用": function(event, can, button, storm) {
|
||||
can.user.input(event, can, [
|
||||
{_input: "text", name: "username", value: "@key=hi"},
|
||||
@ -125,56 +173,6 @@ Volcanos("ondetail", {help: "菜单交互", list: ["添加应用", "添加设备
|
||||
return true
|
||||
})
|
||||
},
|
||||
"删除应用": function(event, can, button, storm) {
|
||||
var msg = can.request(event); msg.Option("hash", storm.hash)
|
||||
can.run(event, [can.Conf(RIVER), "tool", "action", "remove"], function(msg) {
|
||||
can.user.Search(can, {river: can.Conf(RIVER)})
|
||||
})
|
||||
},
|
||||
|
||||
"添加应用": function(event, can, river, button) {
|
||||
can.user.input(event, can, [
|
||||
["类型", "public", "protected", "private"],
|
||||
{_input: "text", name: "名称", value: "hi"},
|
||||
{_input: "text", name: "简介", value: "hello"},
|
||||
], function(event, button, meta, list) {
|
||||
can.run(event, [can.Conf(RIVER), "tool", "action", "create"].concat(["type", list[0], "name", list[1], "text", list[2]]), function(msg) {
|
||||
can.user.Search(can, {river: can.Conf(RIVER), storm: msg.Result()})
|
||||
})
|
||||
return true
|
||||
})
|
||||
},
|
||||
"添加设备": function(event, can, value) {
|
||||
can.run(event, ["search", "Search.onimport.select", "space", "", ""], function(list) {
|
||||
can.core.Next(list, function(item, next) {
|
||||
can.run({}, [can.Conf(RIVER), "node", "action", "insert", "type", item[3], "name", item[4]], function(msg) {
|
||||
// can.user.Search(can, {river: can.Conf(RIVER)})
|
||||
next()
|
||||
})
|
||||
}, function() {
|
||||
})
|
||||
})
|
||||
},
|
||||
"添加用户": function(event, can, river, button) {
|
||||
can.run(event, ["search", "Search.onimport.select", "user", "", ""], function(list) {
|
||||
can.core.Next(list, function(item, next) {
|
||||
can.run({}, [can.Conf(RIVER), "user", "action", "insert", "username", item[5]], function(msg) {
|
||||
// can.user.Search(can, {river: can.Conf(RIVER)})
|
||||
next()
|
||||
})
|
||||
}, function() {
|
||||
})
|
||||
})
|
||||
},
|
||||
"重命名": function(event, can, river, button) {
|
||||
can.user.input(event, can, ["name"], function(event, button, meta, list) {
|
||||
var msg = can.request(event); msg.Option("hash", river.hash)
|
||||
can.run(event, ["action", "modify", "name", meta.name], function(msg) {
|
||||
can.user.Search(can, {river: can.Conf(RIVER)})
|
||||
})
|
||||
return true
|
||||
})
|
||||
},
|
||||
"共享群组": function(event, can, value) {
|
||||
can.user.input(event, can, ["name"], function(event, button, meta, list) {
|
||||
var msg = can.request(event)
|
||||
@ -184,11 +182,6 @@ Volcanos("ondetail", {help: "菜单交互", list: ["添加应用", "添加设备
|
||||
})
|
||||
|
||||
},
|
||||
"删除群组": function(event, can, river, button) {
|
||||
can.run(event, ["remove", "hash", river.hash], function(msg) {
|
||||
can.user.Search(can, {})
|
||||
})
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: []})
|
||||
|
||||
|
@ -1,23 +0,0 @@
|
||||
fieldset.Storm {
|
||||
min-width:80px;
|
||||
max-width:160px;
|
||||
min-height:160px;
|
||||
overflow:auto;
|
||||
float:right;
|
||||
}
|
||||
fieldset.Storm>div.output {
|
||||
padding:0;
|
||||
}
|
||||
fieldset.Storm>div.output>div.item {
|
||||
padding-left:6px;
|
||||
}
|
||||
fieldset.Storm>div.output>div.item:hover {
|
||||
cursor:pointer;
|
||||
background-color:red;
|
||||
border:ridge 2px yellow;
|
||||
}
|
||||
fieldset.Storm>div.output>div.item.select {
|
||||
background-color:red;
|
||||
border:ridge 2px yellow;
|
||||
}
|
||||
|
@ -1,93 +0,0 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb, target) {
|
||||
},
|
||||
})
|
||||
Volcanos("onaction", {help: "交互操作", list: ["创建", "刷新"], _init: function(can, msg, list, cb, target) {
|
||||
can.onexport._init(can, msg, list, cb, target)
|
||||
},
|
||||
create: function(can) {
|
||||
can.user.input(event, can, [["type", "public", "protected", "private"], "name", "text"], function(event, button, meta, list) {
|
||||
can.run(event, [can.Conf("river"), can.Conf("storm"), "action", "create"].concat(list), function(msg) {
|
||||
can.user.Search(can, {"river": can.Conf("river"), "storm": msg.Result()})
|
||||
})
|
||||
return true
|
||||
})
|
||||
},
|
||||
"创建": function(event, can) {
|
||||
can.onaction.create(can)
|
||||
},
|
||||
"刷新": function(event, can) {
|
||||
can.user.Search(can, {"river": can.Conf("river"), "storm": can.Conf("storm")})
|
||||
},
|
||||
})
|
||||
Volcanos("ondetail", {help: "交互菜单", list: ["添加工具", "重命名", "共享", "删除"],
|
||||
insert: function(can) {
|
||||
can.run(event, ["search", "Search.onimport.select", "command", "", ""], function(list) {
|
||||
var args = []; can.core.List(list, function(item) {
|
||||
args = args.concat([item[0], item[5], item[4], ""])
|
||||
})
|
||||
can.run(event, [can.Conf("river"), can.Conf("storm"), "action", "tool"].concat(args), function(msg) {
|
||||
can.user.Search(can, {"river": can.Conf("river"), "storm": can.Conf("storm")})
|
||||
})
|
||||
})
|
||||
},
|
||||
"添加工具": function(event, can, value) {
|
||||
can.run(event, ["search", "Search.onimport.select", "command", "", ""], function(list) {
|
||||
var args = []; can.core.List(list, function(item) {
|
||||
args = args.concat([item[0], item[5], item[4], ""])
|
||||
})
|
||||
can.run(event, [can.Conf("river"), can.Conf("storm"), "action", "tool"].concat(args), function(msg) {
|
||||
can.user.Search(can, {"river": can.Conf("river"), "storm": can.Conf("storm")})
|
||||
})
|
||||
})
|
||||
},
|
||||
"重命名": function(event, can, value) {
|
||||
can.user.input(event, can, ["name"], function(event, button, meta, list) {
|
||||
can.run(event, [can.Conf("river"), value.key, "action", "rename", meta.name], function(msg) {
|
||||
can.user.Search(can, {"river": can.Conf("river"), "storm": can.Conf("storm")})
|
||||
})
|
||||
return true
|
||||
})
|
||||
},
|
||||
"共享": function(event, can, value) {
|
||||
can.user.input(event, can, ["name"], function(event, button, meta, list) {
|
||||
var msg = can.request(event)
|
||||
can.user.share(can, msg, [can.Conf("river"), value.key, "action", "share", meta.name])
|
||||
return true
|
||||
})
|
||||
},
|
||||
"删除": function(event, can, value) {
|
||||
can.run(event, [can.Conf("river"), value.key, "action", "remove"], function(msg) {
|
||||
can.user.Search(can, {"river": can.Conf("river")})
|
||||
})
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg, list, cb, target) { var key = "storm"
|
||||
can.Cache(can.Conf("river"), can._output, can.Conf(key))
|
||||
var river = can.Conf("river", msg.Option("river"))
|
||||
if (msg.Option(key, can.Conf(key, can.Cache(river, can._output)||""))) {
|
||||
return can.run(msg._event, ["search", "Action.onaction._init"])
|
||||
}
|
||||
|
||||
can.run(msg._event, [river], function(sup) { can._output.innerHTML = ""; var select; sup.Table(function(value, index, array) {
|
||||
var view = can.onappend.item(can, can._output, "item", value, function(event, item) { var msg = can.request(event, {_msg: sup})
|
||||
// 左键点击
|
||||
msg.Option("river", river)
|
||||
msg.Option(key, can.Conf(key, value.key)), can.run(event, ["search", "Action.onaction._init"])
|
||||
}, function(event, item) {
|
||||
// 右键点击
|
||||
can.onappend.menu(can, msg, value)
|
||||
})
|
||||
|
||||
if (index == 0 || [value.key, value.name].indexOf(can.user.Search(can, key)) > -1) {
|
||||
select = view
|
||||
if (!value.count) {
|
||||
can.ondetail["添加工具"]({}, can, value)
|
||||
}
|
||||
}
|
||||
}); select && select.click() })
|
||||
},
|
||||
key: function(can, msg) {
|
||||
// msg.Option("storm", can.Conf("storm"))
|
||||
},
|
||||
})
|
||||
|
@ -2,6 +2,34 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf,
|
||||
},
|
||||
})
|
||||
Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, list, cb, target) {
|
||||
// can.onaction._process(can, sub, value, msg, cmds, cb, silent)
|
||||
},
|
||||
_process: function(can, sub, conf, msg, cmds, cb, silent) {
|
||||
var p = can.onaction[msg.Option("_process")]
|
||||
typeof p == "function"? p(can, sub, conf, msg, cmds, cb, silent): typeof cb == "function" && cb(msg)
|
||||
can.run(msg._event, ["search", "Footer.onaction.ncmd"])
|
||||
},
|
||||
_progress: function(can, sub, conf, msg, cmds, cb, silent) {
|
||||
var size = msg.Append("size") || msg.Append("count")
|
||||
if (size != "" && size == msg.Append("total")) {
|
||||
return typeof cb == "function" && cb(msg)
|
||||
}
|
||||
can.user.toast(can, {
|
||||
width: 400,
|
||||
title: conf.name+" "+msg.Append("step")+"% ", duration: 1100,
|
||||
text: "执行进度: "+can.base.Size(size||0)+"/"+can.base.Size(msg.Append("total")||"1000")+"\n"+msg.Append("name"),
|
||||
progress: parseInt(msg.Append("step")),
|
||||
})
|
||||
can.page.Select(can, sub._output, "td", function(td) {
|
||||
if (td.innerText == msg.Option("name")) {
|
||||
can.page.ClassList.add(can, td, "done")
|
||||
}
|
||||
})
|
||||
can.Timer(1000, function() {
|
||||
var res = sub.request({})
|
||||
res.Option("_progress", msg.Option("_progress"))
|
||||
sub.run(res._event, cmds, cb, silent)
|
||||
})
|
||||
},
|
||||
input: function(event, can, name, cb) { var feature = can.Conf("feature")
|
||||
feature[name]? can.user.input(event, can, feature[name], function(ev, button, data, list) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user