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-21 18:41:29 +08:00
parent 7ffca63865
commit 7324ee211a
22 changed files with 212 additions and 315 deletions

View File

@ -285,7 +285,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
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)
}, silent)
})
return true
})
return
@ -398,10 +398,11 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
return can.page.Append(can, target, [{view: ["item "+item.type], list: [input]}])[item.name]
},
table: function(can, msg, cb, target) {
table: function(can, msg, cb, target, list) {
var table = can.page.AppendTable(can, msg, target||can._output, msg.append, cb||function(value) {
return {text: [value, "td"]}
}); table && can.page.Modify(can, table, {className: "content"})
list && can.page.RangeTable(can, table, list)
return table
},
board: function(can, text, target) { text = can.page.Display(text || "")
@ -413,7 +414,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
var list = can.core.Split(key, "@=", "@=")
var pkey = list[0], pval = list[1]||""
target.type != "button" && target.value.startsWith("@") && (target.value = pval||"")
target.type != "button" && target.value && target.value.startsWith("@") && (target.value = pval||"")
pkey && can.require(["/plugin/input/"+pkey+".js"], function(can) {
can.onfigure && can.core.Item(can.onfigure[pkey], function(key, cb) { if (key.startsWith("on")) {
@ -490,6 +491,9 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, targe
can.onmotion.move(can, ui.fieldset, layout)
can.page.Remove(can, ui.legend)
},
background: function(can, url, target) { target = target || document.body
can.page.Modify(can, target, {style: {background: url == "" || url == "void"? "": 'url("'+url+'")'}})
},
resize: function(can, name, cb) {
var list = []; can.onengine.listen(can, name, function(width, height) {

View File

@ -98,7 +98,7 @@ Volcanos("core", {help: "核心模块",
})
var res = func.apply(mod||can, list)
if (!echo && typeof cb == "function") { res && msg.Echo(res), cb(msg) }
if (!echo && typeof cb == "function") { res && msg.Echo(res), arguments.callee.apply(this, [cb, {msg: msg, res: res}]) }
return res
}),
Split: shy("分词器", function(str) { if (!str || !str.length) { return [] }

View File

@ -118,7 +118,7 @@ Volcanos("user", {help: "用户模块", agent: {
// TODO
})
},
carte: function(event, can, meta, list, cb) {
carte: function(event, can, meta, list, cb, view) {
meta = meta||can.ondetail||can.onaction||{}, list = list&&list.length > 0? list: meta.list||[]; if (list.length == 0) { return }
cb = cb||function(ev, item, meta) {
var cb = meta[item] || can.ondetail&&can.ondetail[item] || can.onaction&&can.onaction[item] || can.onkeymap&&can.onkeymap._remote
@ -140,6 +140,7 @@ Volcanos("user", {help: "用户模块", agent: {
}]} ]}
}) }])
view && can.page.Modify(can, ui.first, view)
event.stopPropagation()
event.preventDefault()
return ui

View File

@ -4,7 +4,7 @@ Volcanos({name: "chat", iceberg: "/chat/", volcano: "/frame.js",
{name: "Search", help: "搜索框", pos: "auto"},
{name: "River", help: "群聊组", pos: "left", action: ["创建", "刷新"]},
{name: "Action", help: "工作台", pos: "main"},
{name: "Footer", help: "状态条", pos: "foot", state: ["ncmd", "keys"]},
{name: "Footer", help: "状态条", pos: "foot", state: ["ncmd"]},
], main: {name: "Header", engine: "remote", list: ["/publish/order.js"]}, plugin: [
"/plugin/state.js",
"/plugin/input.js",

View File

@ -12,8 +12,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, 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) {
sub.run = function(event, cmds, cb) { var msg = sub.request(event)
return can.run(event, (can.onengine[cmds[0]]? []: [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])
@ -70,9 +70,7 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
})
can.onengine.listen(can, "search", function(msg, word) {
if (word[0] == "*" || word[0] == "plugin") {
can.onexport.plugin(can, msg)
}
if (word[0] == "*" || word[0] == "plugin") { can.onexport.plugin(can, msg) }
})
can._target.ontouchstart = function(event) {
@ -86,9 +84,23 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
can.run({}, ["search", "Header.onimport.menu", "action",
["布局", "默认布局", "流动布局", "网格布局", "标签布局", "自由布局"],
], function(event, key) {
can.core.CallFunc([can.onaction, key], {event: event, can: can, key: key})
})
], function(event, key) { can.onaction._layout(can, key) })
},
_layout: function(can, key) {
var trans = {
"默认布局": "auto",
"流动布局": "flow",
"网格布局": "grid",
"标签布局": "tabs",
"自由布局": "free",
}
can.page.Modify(can, can._action, {className: "action "+trans[key]})
can.page.Modify(can, can._output, {className: "output "+trans[key]})
if (key == "标签布局") {
can.onmotion.select(can, can._output, "fieldset.plugin", 0)
can.onmotion.select(can, can._action, "div.item", 0)
}
},
_select: function(can, msg, river, storm) {
function key(name) { return can.Conf("river")+"."+can.Conf("storm")+"."+name}
@ -109,29 +121,6 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
}
})
},
"默认布局": function(event, can) {
can.page.Modify(can, can._action, {className: "action auto"})
can.page.Modify(can, can._output, {className: "output auto"})
},
"流动布局": function(event, can) {
can.page.Modify(can, can._action, {className: "action flow"})
can.page.Modify(can, can._output, {className: "output flow"})
},
"网格布局": function(event, can) {
can.page.Modify(can, can._action, {className: "action grid"})
can.page.Modify(can, can._output, {className: "output grid"})
},
"标签布局": function(event, can) {
can.page.Modify(can, can._action, {className: "action tabs"})
can.page.Modify(can, can._output, {className: "output tabs"})
can.onmotion.select(can, can._output, "fieldset.plugin", 0)
can.onmotion.select(can, can._action, "div.item", 0)
},
"自由布局": function(event, can) {
can.page.Modify(can, can._action, {className: "action free"})
can.page.Modify(can, can._output, {className: "output free"})
},
})
Volcanos("onexport", {help: "导出数据", list: [],
args: function(can, msg, list, cb, target) {

View File

@ -1,3 +0,0 @@
fieldset.Debug>div.output td {
padding:2px;
}

View File

@ -1,20 +0,0 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
can.require(["/require/github.com/Tencent/vConsole/dist/vconsole.min.js"], function(can) {
var v = new VConsole();
console.log(v);
})
},
})
Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) {
can.onimport._init(can, msg, list, cb, target)
can.user.log = function() {
can.page.Append(can, can._output, [{td: [
can.base.Time(),
can.base.FileLine(),
].concat(can.core.List(arguments))}])
}
},
})
Volcanos("onexport", {help: "导出数据", list: []})

View File

@ -14,27 +14,20 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.toast = can.page.Append(can, target, [{view: ["toast", "div", ""]}]).first
},
_state: function(can, msg, target) {
can.core.List(can.Conf("state"), function(item) {
can.page.Append(can, target, [{view: ["state "+item, "div", can.Conf(item)],
list: [{text: item}, {text: ": "}, {text: [can.Conf(item)||"", "span", item]}],
}])
can.core.List(can.Conf("state")|["ncmd"], function(item) {
can.page.Append(can, target, [{view: ["state "+item, "div", can.Conf(item)], list: [
{text: [item, "label"]}, {text: [": ", "label"]}, {text: [can.Conf(item)||"", "span", item]},
]}])
})
},
toast: function(can, msg, text) {
can.page.Modify(can, can.toast, {innerHTML: text})
can.page.Modify(can, can.toast, text)
},
keys: function(can, msg, list, cb, target) {
can.page.Select(can, target, "span.keys", function(item) {
item.innerHTML = list[0]||""
})
typeof cb == "function" && cb(msg)
},
ncmd: function(can, msg, list, cb, target) {
ncmd: function(can, target) {
can.page.Select(can, target, "span.ncmd", function(item) {
item.innerHTML = can.Conf("ncmd", parseInt(can.Conf("ncmd")||"0")+1+"")+""
})
typeof cb == "function" && cb(msg)
},
})
Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) {

View File

@ -1,41 +1,51 @@
(function() { const TITLE = "title", TOPIC = "topic", POD = "pod", STATE = "state", USERNAME = "username"
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
can._trans = {
"river": "菜单",
"search": "搜索",
"setting": "设置",
"pack": "打包页面",
"white": "白色主题",
"black": "黑色主题",
"white": "白色主题",
"print": "打印主题",
"background": "清除背景",
"void": "清除背景",
"pack": "打包页面",
"logout": "退出",
}
can.onmotion.clear(can)
can.onimport._title(can, msg, target)
can.onimport._state(can, msg, target)
can.onimport._search(can, msg, target)
// can.onengine._daemon(can, can.user.title())
can.onimport._background(can, msg, target)
can.onimport._agent(can, msg, target)
can.onimport._menu(can, msg, target)
can.onimport._background(can, msg, target)
// can.onengine._daemon(can, can.user.title())
typeof cb == "function" && cb(msg)
},
_background: function(can, msg, target) { if (!msg.Option("background")) { return }
if (msg.Option("background") == "void") {
can.page.Modify(can, document.body, {style: {background: ''}})
} else {
can.page.Modify(can, document.body, {style: {background: 'url("'+msg.Option("background")+'")'}})
}
},
_title: function(can, msg, target) {
can.user.title(can.user.Search(can, TITLE) || can.user.Search(can, POD))
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(item) {
can.page.Append(can, target, [{view: [TITLE, "div", item],
click: function(event) { can.onaction.title(event, can) },
}])
can.page.Append(can, target, [{view: ["title", "div", item], onclick: function(event) {
can.onaction.title(event, can)
}}])
})
},
_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)], onclick: function(event) {
can.core.CallFunc([can.onaction, item], [event, can, item])
}, _init: function(target) {
item == "time" && can.core.Timer({interval: 1000, length: -1}, function() {
can.onimport.time(can, target)
}) && can.onappend.figure(can, {}, "@date", target)
}}])
})
},
_search: function(can, msg, target) {
can.user.isMobile || (can.search = can.page.Append(can, target, [{view: "search", list: [{type: "input", data: {placeholder: "search"}, onkeydown: function(event) {
can.onkeypop.input(event, can); switch (event.key) {
case "Enter": can.run(event, ["search", "Search.onimport.select", "*", event.target.value]); break
}
}, }], }]).input)
},
_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) {
@ -43,26 +53,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
})
})
},
_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)],
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)
})
},
}])
})
},
_search: function(can, msg, target) {
can.user.isMobile || (can.search = can.page.Append(can, target, [{view: "search", list: [{type: "input", data: {placeholder: "search"}, onkeydown: function(event) {
can.onkeypop.input(event, can)
switch (event.key) {
case "Enter": can.run(event, ["search", "Search.onimport.select", "*", event.target.value]); break
}
}, }], }]).input)
_background: function(can, msg) {
can.onlayout.background(can, msg.Option("background"), document.body)
},
_agent: function(can, msg, target) {
if (can.user.isMobile) {
@ -70,12 +62,20 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.onaction.Footer(can)
} else if (can.user.isExtension) {
can.onaction.River(can)
} else if (can.user.Search(can, POD)) {
} else if (can.user.Search(can, "pod")) {
can.onaction.River(can)
can.onaction.Footer(can)
}
can.user.isWeiXin && can.onimport._weixin(can)
},
_menu: function(can, msg, target) {
can.page.Append(can, target, can.core.List(can.user.isMobile || can.user.isExtension || can.user.Search(can, "pod")? ["river", "setting"]: ["setting"], function(item) {
return {view: ["menus", "div", item], onclick: function(event) {
can.core.CallFunc([can.onaction, item], [event, can, item])
}}
}))
},
_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,
@ -101,26 +101,17 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
})
}) })
},
_menu: function(can, msg, target) {
can.page.Append(can, target, can.core.List(can.user.isMobile || can.user.isExtension || can.user.Search(can, POD)? ["river", "setting"]: ["setting"], function(item) {
return {view: ["menus", "div", item], onclick: function(event) {
var cb = can.onaction[item]; typeof cb == "function" && cb(event, can, item)
}}
}))
},
time: function(can, target) {
time: function(can, target) { can.onlayout.topic(can)
target.innerHTML = can.base.Time(null, "%w %H:%M:%S")
can.onlayout.topic(can)
},
background: function(event, can, url) {
can.run(event, ["action", "background", url], function(msg) {
can.onimport._background(can, msg)
})
},
menu: function(can, cmds, cb) { // type item...
can.page.Append(can, can._output, [{type: cmds[0], list: can.core.List(cmds.slice(1), function(item) {
return can.page.Append(can, can._output, [{type: cmds[0], list: can.core.List(cmds.slice(1), function(item) {
if (typeof item == "string") {
return {view: ["menu", "div", item], onclick: function(event) {
typeof cb == "function" && cb(event, item)
@ -135,11 +126,12 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
} else if (typeof item == "object") {
return item
}
}) }])
}) }]).first
},
})
Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) {
function init() { can.run({}, [], function(msg) { can.Conf(USERNAME, msg.Option("user.nick")||msg.Option("user.name"))
function init() { can.run({}, [], function(msg) {
can.Conf("username", msg.Option("user.nick")||msg.Option("user.name"))
can.onimport._init(can, msg, list, function(msg) {
can.run({}, ["search", "Search.onaction._init"])
can.run({}, ["search", "Action.onaction._init"])
@ -150,11 +142,13 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
}) }
can.onlayout.topic(can)
can.user.isLocalFile? init(): can.run({}, ["check"], function(msg) { msg.Result()? init(): msg.Option("sso")? can.user.jumps(msg.Option("sso")): can.user.login(can, init) })
can.user.isLocalFile? init(): can.run({}, ["check"], function(msg) {
msg.Result()? init(): msg.Option("sso")? can.user.jumps(msg.Option("sso")): can.user.login(can, init)
})
},
title: function(event, can) {
var args = {}; can.core.List([POD, TOPIC, TITLE], function(key) {
var args = {}; can.core.List(["pod", "topic", "title"], function(key) {
var value = can.user.Search(can, key); value && (args[key] = value)
})
can.user.jumps(can.user.MergeURL(can, args, true))
@ -163,17 +157,17 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
var ui = can.user.carte(event, can, can.onaction, ["logout"])
can.page.Modify(can, ui.first, {style: {top: can._target.offsetHeight}})
},
logout: function(event, can) {
can.user.logout(can)
},
time: function(event, can) {
can.require(["/plugin/input/date.js"], function(can) {
event.target.value = ""
var ui = can.onfigure.date.onclick(event, can)
can.page.Modify(can, ui.fieldset, {style: {right: 0, top: can._target.offsetHeight, left: ""}})
})
},
logout: function(event, can) { can.user.logout(can) },
river: function(event, can) { can.run(event, ["search", "River.onmotion.toggle"]) },
setting: function(event, can) {
var ui = can.user.carte(event, can, can.onaction, ["black", "white", "print", "void", "pack"])
can.page.Modify(can, ui.first, {style: {top: can._target.offsetHeight}})
},
black: function(event, can, button) { can.onlayout.topic(can, button) },
white: function(event, can, button) { can.onlayout.topic(can, button) },
print: function(event, can, button) { can.onlayout.topic(can, "white print") },
void: function(event, can, button) { can.onimport.background(event, can, button) },
pack: function(event, can) {
can.core.Item(Volcanos.meta.pack, function(key, msg) { delete(msg._event), delete(msg._can) })
var msg = can.request(event, {name: "demo", content: JSON.stringify(Volcanos.meta.pack)})
@ -184,23 +178,9 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
})
},
river: function(event, can) { can.run(event, ["search", "River.onmotion.toggle"]) },
setting: function(event, can) {
var ui = can.user.carte(event, can, can.onaction, ["pack", "white", "black", "print", "background"])
can.page.Modify(can, ui.first, {style: {top: can._target.offsetHeight}})
},
black: function(event, can, button) { can.onlayout.topic(can, button) },
white: function(event, can, button) { can.onlayout.topic(can, button) },
print: function(event, can, button) { can.onlayout.topic(can, "white print") },
background: function(event, can, button) {
can.onimport.background(event, can, "void")
},
River: function(can) { can.run({}, ["search", "River.onmotion.toggle"]) },
Footer: function(can) { can.run({}, ["search", "River.onmotion.autosize"]) },
})
Volcanos("onexport", {help: "导出数据", list: [],
height: function(can) { return can._target.offsetHeight },
})
})()

View File

@ -1,32 +1,21 @@
(function() { const RIVER = "river", STORM = "storm", POD = "pod"
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
can._main_river = can.user.Search(can, RIVER) || (can.user.isMobile||can.user.isExtension? "product": "project")
can._main_storm = can.user.Search(can, STORM) || (can.user.isMobile? "office": can.user.isExtension? "chrome": "studio")
can.run({}, ["search", "Header.onimport.menu", "river",
["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备"],
["访问", "访问研发", "访问应用", "访问工具", "访问用户", "访问设备", "访问任务"],
["共享", "共享群组", "共享应用", "共享工具", "共享用户", "共享设备"],
], function(event, item) {
var cb = can.ondetail[item]; typeof cb == "function" && cb(event, can, item, can.Conf(RIVER), can.Conf(STORM))
})
can._main_river = can.user.Search(can, "river") || (can.user.isMobile||can.user.isExtension? "product": "project")
can._main_storm = can.user.Search(can, "storm") || (can.user.isMobile? "office": can.user.isExtension? "chrome": "studio")
can.onmotion.clear(can), can.sublist = {}
var select; msg.Table(function(value, index, array) {
var view = can.onappend.item(can, "item", value, function(event, item) {
// 左键点击
// 左键选中
can.onaction.storm(event, can, value.hash)
}, function(event) {
// 右键点击
var ui = can.user.carte(event, can, can.ondetail, can.ondetail.list, function(ev, item, meta) {
// 右键菜单
can.user.carte(event, can, can.ondetail, can.ondetail.list, function(ev, item, meta) {
can.ondetail[item](event, can, item, value.hash)
}); can.page.Modify(can, ui.first, {style: {left: can._target.offsetWidth}})
}, {style: {left: can._target.offsetWidth}})
}, target)
if (index == 0 || [value.hash, value.name].indexOf(can._main_river) > -1) { select = view }
}), select && select.click()
typeof cb == "function" && cb(msg)
}), select && select.click(), typeof cb == "function" && cb(msg)
},
})
Volcanos("onengine", {help: "解析引擎", list: [], engine: function(event, can, msg, pane, cmds, cb) {
@ -41,42 +30,24 @@ Volcanos("onengine", {help: "解析引擎", list: [], engine: function(event, ca
},
})
Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, list, cb, target) {
can.run({}, [], function(msg) {
can.onimport._init(can, msg, list, cb, can._output)
can.run({}, [], function(msg) { can.onimport._init(can, msg, list, cb, can._output) })
can.onengine.listen(can, "search", function(msg, word) {
if (word[0] == "*" || word[0] == "storm") { can.onexport.storm(can, msg) }
})
can.onengine.listen(can, "action.touch", function() {
can.page.Select(can, document.body, "div.carte", function(item) {
can.page.Remove(can, item)
})
})
can.onengine.listen(can, "search", function(msg, word) {
if (word[0] != "*" && word[0] != "storm") { return }
var fields = (msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",")
can.core.Item(can.onengine.river, function(river, value) {
can.core.Item(value.storm, function(storm, item) {
if (word[1] != "" && word[1] != storm && word[1] != item.name) { return }
can.core.List(fields, function(key) {
switch (key) {
case "ctx": msg.Push(key, "web.chat"); break
case "cmd": msg.Push(key, "storm"); break
case "type": msg.Push(key, river); break
case "name": msg.Push(key, storm); break
case "text":
// msg.Push(key, can.user.MergeURL(can, {river: river, storm: storm}))
// break
msg.Push(key, shy("跳转", function(event) {
can.onaction.action(event, can, river, storm)
})); break
default: msg.Push(key, "")
}
})
})
})
can.run({}, ["search", "Header.onimport.menu", "river",
["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备"],
["访问", "访问研发", "访问应用", "访问工具", "访问用户", "访问设备", "访问任务"],
["共享", "共享群组", "共享应用", "共享工具", "共享用户", "共享设备"],
], function(event, item) {
can.core.CallFunc([can.ondetail, item], [event, can, item, can.Conf("river"), can.Conf("storm")])
})
},
storm: function(event, can, river) {
@ -89,14 +60,15 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg,
return {text: [storm.name, "div", "item"], onclick: function(event) {
// 左键点击
can.onaction.action(event, can, river, storm.hash)
can.user.title(can.user.Search(can, POD) || storm.name)
can.user.title(can.user.Search(can, "pod") || storm.name)
}, oncontextmenu: function(event) {
can.onaction.action(event, can, river, storm.hash)
can.user.title(can.user.Search(can, POD) || storm.name)
can.user.title(can.user.Search(can, "pod") || storm.name)
// 右键点击
var ui = can.user.carte(event, can, can.ondetail, ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"], function(ev, item, meta) {
can.user.carte(event, can, can.ondetail, ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"], function(ev, item, meta) {
can.ondetail[item](event, can, item, river, storm.hash)
}); can.page.Modify(can, ui.first, {style: {left: can._target.offsetWidth}})
}, {style: {left: can._target.offsetWidth}})
}}
}) }]).first, list.children.length > 0 && list.children[select].click()
@ -105,8 +77,9 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg,
})
},
action: function(event, can, river, storm) {
var msg = can.request(event, {river: can.Conf(RIVER, river), storm: can.Conf(STORM, storm)})
can.onengine.signal(can, "storm.select", msg)
can.onengine.signal(can, "storm.select", can.request(event, {
river: can.Conf("river", river), storm: can.Conf("storm", storm),
}))
can.page.Select(can, can._output, "div.item.select", function(item) {
can.page.ClassList.del(can, item, "select")
@ -125,7 +98,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg,
},
"创建": function(event, can) { can.onaction.create(event, can) },
"刷新": function(event, can) { can.user.Search(can, {river: can.Conf(RIVER), storm: can.Conf(STORM)}) },
"刷新": function(event, can) { can.user.Search(can, {river: can.Conf("river"), storm: can.Conf("storm")}) },
})
Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户", "添加设备", "添加应用", "重命名群组", "删除群组"],
"创建群组": function(event, can) { can.onaction.create(event, can) },
@ -244,5 +217,28 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户
Volcanos("onexport", {help: "导出数据", list: [],
width: function(can) { return can._target.offsetWidth },
height: function(can) { return can._target.offsetHeight },
storm: function(can, msg) {
var fields = (msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",")
can.core.Item(can.onengine.river, function(river, value) {
can.core.Item(value.storm, function(storm, item) {
if (word[1] != "" && word[1] != storm && word[1] != item.name) { return }
can.core.List(fields, function(key) {
switch (key) {
case "ctx": msg.Push(key, "web.chat"); break
case "cmd": msg.Push(key, "storm"); break
case "type": msg.Push(key, river); break
case "name": msg.Push(key, storm); break
case "text":
// msg.Push(key, can.user.MergeURL(can, {river: river, storm: storm}))
// break
msg.Push(key, shy("跳转", function(event) {
can.onaction.action(event, can, river, storm)
})); break
default: msg.Push(key, "")
}
})
})
})
},
})
})()

View File

@ -4,56 +4,47 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
if (event.key == "Escape") { can.onmotion.hide(can) }
if (event.key == "Enter") { event.stopPropagation(), event.preventDefault()
if (event.ctrlKey && can.onaction.choice(event, can, 0)) { return }
if (event.ctrlKey && can.onaction.select(event, can, 0)) { return }
can.input(event, event.target.value)
}
}]},
{view: "content"}, {view: "display", list: [{type: "table"}]},
])
typeof cb == "function" && cb(msg)
{view: "content"}, {view: ["display", "table"]}, {view: "preview"},
]), typeof cb == "function" && cb(msg)
},
_table: function(can, msg, fields) { can.onmotion.clear(can, can.ui.content)
var table = can.onappend.table(can, msg, function(value, key, index, line) {
can.Status("count", index+1)
can.onappend.table(can, msg, function(value, key, index, line) { can.Status("count", index+1)
return {text: [key == "text" && typeof line.text == "function" && line.text.help || value, "td"], onclick: function(event) {
if (event.shiftKey) { var msg = can.request(event, line)
can.onappend.plugin(can, {index: line.ctx+"."+line.cmd}, function(story, meta) {
story.run = function(event, cmds, cb, silent) {
can.run(event, ["command", "run", meta.index].concat(cmds), function(msg) {
return can.onappend.plugin(can, {index: line.ctx+"."+line.cmd}, function(sub) {
sub.run = function(event, cmds, cb) {
can.run(event, ["action", "command", "run", meta.index].concat(cmds), function(msg) {
typeof cb == "function" && cb(msg)
})
}
}, can.ui.display)
return
}, can.ui.preview)
}
if (line.ctx == "web.chat" && line.cmd == "/search") {
can.onimport.select(can, msg, [line.type, line.name, line.text], can.cb)
return
return can.onimport.select(can, msg, [line.type, line.name, line.text], can.cb)
}
if (typeof line.text == "function") {
return can.onmotion.hide(can), line.text(event)
}
can.page.Append(can, can.ui.table, [{td: can.core.List(fields, function(item) {
can.page.Append(can, can.ui.display, [{td: can.core.List(fields, function(item) {
return line[item]
}), data: {index: index}, onclick: function(event) {
can.page.Remove(can, event.target.parentNode)
can.Status("selected", can.page.Select(can, can.ui.table, "tr").length-1)
}}])
can.Status("selected", can.page.Select(can, can.ui.table, "tr").length-1)
can.Status("selected", can.page.Select(can, can.ui.display, "tr").length-1)
}}]), can.Status("selected", can.page.Select(can, can.ui.display, "tr").length-1)
}}
}, can.ui.content)
}, can.ui.content, [fields.indexOf("pod"), fields.indexOf("ctx"), fields.indexOf("cmd"),
fields.indexOf("type"), fields.indexOf("name"), fields.indexOf("text")])
fields.indexOf("ctx") > -1 && can.page.RangeTable(can, table, [fields.indexOf("ctx"),
fields.indexOf("cmd"), fields.indexOf("type"), fields.indexOf("name")])
can.page.Modify(can, can.ui.table, {style: {width: table.offsetWidth}})
},
_word: function(can, msg, cmds, fields) {
var msg = can.request({}, {fields: fields.join(","), word: cmds})
msg = can.request({}, {fields: fields.join(","), word: cmds})
can.onengine.signal(can, "search", msg)
can.onmotion.clear(can, can.ui.content)
can.run(msg._event, cmds, function(msg) { can.list = msg.Table()
can.onimport._table(can, msg, fields)
})
@ -62,21 +53,21 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
select: function(can, msg, cmds, cb) { can.ui.word.value = cmds[1]
var fields = (cmds[2]||msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",")
can.page.Appends(can, can.ui.table, [{th: fields}]), can.cb = function() {
can.page.Appends(can, can.ui.display, [{th: fields}]), can.cb = function() {
typeof cb == "function" && cb(can.onexport.select(can)), can.onmotion.hide(can)
}
can.run({}, ["search", "Header.onexport.height"], function(res) {
can.page.Modify(can, can._target, {style: {top: res}})
})
can.run({}, ["search", "River.onexport.width"], function(res) {
can.page.Modify(can, can._target, {style: {left: res}})
})
can.input = function(event, word) { cmds[1] = word
can.onimport._word(can, msg, cmds, fields)
}
can.page.Select(can, document.body, "fieldset.pane.Header", function(item) {
can.page.Modify(can, can._target, {style: {top: item.offsetHeight}})
})
can.page.Select(can, document.body, "fieldset.pane.River", function(item) {
can.page.Modify(can, can._target, {style: {left: item.offsetWidth}})
})
can.onmotion.show(can), can.ui.input.focus()
can.onimport._word(can, msg, cmds, fields)
},
@ -85,10 +76,10 @@ Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"]
can.onimport._init(can, msg, list, cb, can._output)
},
"关闭": function(event, can) { can.onmotion.hide(can) },
"清空": function(event, can) { can.onmotion.clear(can, can.ui.table), can.onmotion.clear(can, can.ui.display) },
"清空": function(event, can) { can.onmotion.clear(can, can.ui.display), can.onmotion.clear(can, can.ui.display) },
"完成": function(event, can) { typeof can.cb == "function" && can.cb() },
choice: function(event, can, index) {
select: function(event, can, index) {
if (can.list && can.list[index]) { can.onmotion.hide(can)
if (typeof can.list[index].text == "function") {
can.list[index].text(event)

View File

@ -1,18 +1,16 @@
Volcanos("onfigure", {help: "控件详情", list: [],
province: {onclick: function(event, can, item, target, figure) {
Volcanos("onfigure", {help: "控件详情", list: [], province: {onclick: function(event, can, item, target, figure) {
can.require(["/require/github.com/shylinux/echarts/echarts.js","/require/github.com/shylinux/echarts/china.js"], function() {
can.onappend._action(can, [
{type: "button", name: "清空", onclick: function(event) { target.value = "" }},
{type: "button", name: "关闭", onclick: function(event) { can.page.Remove(can, figure.fieldset) }},
], figure.action)
can.page.Modify(can, figure.fieldset, {style: {left: 120}})
can.require(["/require/github.com/shylinux/echarts/echarts.js","/require/github.com/shylinux/echarts/china.js"], function() {
var china_chart = echarts.init(can.page.Append(can, figure.output, [{type: "div", style: {width: "600px", height: "400px"}}]).first);
china_chart.setOption({geo: {map: 'china'}}), china_chart.on('click', function (params) {
target.value = params.name, msg.Option("_refresh") && run()
can.page.Remove(can, figure.fieldset)
})
var china_chart = echarts.init(can.page.Append(can, figure.output, [{type: "div", style: {width: "600px", height: "400px"}}]).first);
china_chart.setOption({geo: {map: 'china'}}), china_chart.on('click', function (params) {
target.value = params.name, msg.Option("_refresh") && run()
can.page.Remove(can, figure.fieldset)
})
}},
})
})
}}, })

View File

@ -260,8 +260,10 @@ 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)
if (can.current) {
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: ""}})

View File

@ -5,15 +5,12 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf,
},
_progress: function(can, msg, cmds, cb, silent) {
var size = msg.Append("size") || msg.Append("count")
if (size != "" && size == msg.Append("total")) {
return false
}
if (size != "" && size == msg.Append("total")) { return false }
can.user.toast(can, {
title: can._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")),
width: 400,
progress: parseInt(msg.Append("step")), width: 400,
})
can.page.Select(can, can._output, "td", function(td) {
@ -33,16 +30,17 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf,
var sub = can.request({}, {_count: parseInt(msg.Option("_count"))-1})
can.onappend._output(can, can.Conf(), sub._event, can.Pack())
})
return true
},
_field: function(can, msg) {
can.onappend._plugin(can, msg, {}, function(sub, meta) {
msg.Table(function(item) { can.onappend._plugin(can, item, {}, function(sub, meta) {
sub.run = function(event, cmds, cb, silent) {
var res = can.request(event); can.core.Item(can.Option(), function(key, value) {
res.Option(key) || res.Option(key, value)
})
can.run(event, (msg["_prefix"]||[]).concat(cmds), cb, true)
}
})
}) })
return true
},
})

View File

@ -7,7 +7,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.onmotion.clear(can)
can.onappend.plugins(can, {index: "web.wiki.draw"}, function(sub) {
sub.run = function(event, cmds, cb, silent) {
sub.run = function(event, cmds, cb) {
typeof cb == "function" && cb(sub.request())
can.core.Timer(100, function() { can.sub = sub._outputs[0]

View File

@ -6,7 +6,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.onmotion.clear(can)
can.onappend.plugins(can, {index: "web.wiki.draw"}, function(sub) {
sub.run = function(event, cmds, cb, silent) {
sub.run = function(event, cmds, cb) {
typeof cb == "function" && cb(sub.request())
can.core.Timer(100, function() { can.sub = sub._outputs[0]

View File

@ -1,6 +1,6 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
if (can.onimport._process(can, msg)) { return typeof cb == "function" && cb(can, msg) }
if (can.sup.onimport._process(can.sup, msg)) { return typeof cb == "function" && cb(can, msg) }
if (can.onimport._process(can, msg)) { return typeof cb == "function" && cb(can, msg) }
can.onmotion.clear(can)
can.ui = can.onlayout.display(can)
@ -50,6 +50,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}
})
},
_process: function(can, msg) {
var cb = can.onimport[msg.Option("_process")]
return typeof cb == "function" && cb(can, msg)
@ -136,7 +137,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}, data: {"className": "args"}},
]}
},
})
Volcanos("onaction", {help: "控件交互", list: []})
Volcanos("onexport", {help: "导出数据", list: []})

View File

@ -18,19 +18,18 @@ Volcanos("chrome", {
})
return
}
if (cmds[1] == "") { // 当前标签
chrome.tabs.query({currentWindow: true, active: true}, function(tabs) {
cmds[1] = tabs[0].id
chrome.tabs.query({currentWindow: true, active: true}, function(tabs) { cmds[1] = tabs[0].id
chrome.tabs.sendMessage(parseInt(cmds[1]), msg, function(res) {
msg.Copy(res), typeof cb == "function" && cb(msg)
})
})
return
} else {
chrome.tabs.sendMessage(parseInt(cmds[1]), msg, function(res) {
msg.Copy(res), typeof cb == "function" && cb(msg)
})
}
chrome.tabs.sendMessage(parseInt(cmds[1]), msg, function(res) {
msg.Copy(res), typeof cb == "function" && cb(msg)
})
},
bookmark: function(msg, cmds, cb) {
chrome.bookmarks.getSubTree(cmds[0]||"0", function(labs) {
@ -42,7 +41,7 @@ Volcanos("chrome", {
typeof cb == "function" && cb(msg)
})
},
}, ["/lib/base", "/lib/core", "/lib/misc", "/lib/page", "/lib/user"], function(can) {
}, ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], function(can) {
can.Conf({iceberg: "http://localhost:9020/"})
can.user.toast = function(message, title) {chrome.notifications.create(null, {
message: message, title: title||can._name, iconUrl: "/favicon.ico", type: "basic",

View File

@ -31,7 +31,7 @@ Volcanos("chrome", {
}, [], function(can) { can._load("chrome")
chrome.extension.onMessage.addListener(function(req, sender, cb) {
var msg = can.request(); can.core.List(req.option, function(key) { msg.Option(key, req[key][0]) })
can.core.CallFunc([can, req.detail[3]||"spide"], {can: can, msg: msg, cmds: req.detail.slice(4), cb: cb})
can.core.CallFunc([can, req.detail[3]||"spide"], [can, msg, req.detail.slice(4), cb])
})
})

View File

@ -1,13 +1,10 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="/page/index.css">
</head>
<body style="min-width:800px; min-height:600px; overflow:auto">
<script src="/proto.js"></script>
<script src="/frame.js"></script>
<script src="/publish/chrome/popup.js"></script>
</body>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="/page/index.css">
</head>
<body style="min-width:800px; min-height:600px; overflow:auto">
<script src="/proto.js"></script>
<script src="/frame.js"></script>
<script src="/publish/chrome/popup.js"></script>
</body>

View File

@ -1,10 +1,10 @@
Volcanos({name: "demo", volcano: "/frame.js", iceberg: "http://localhost:9020/chat/", intshell: "plug.sh",
libs: ["/lib/base", "/lib/core", "/lib/misc", "/lib/page", "/lib/user"], panes: [
Volcanos({name: "demo", iceberg: "http://localhost:9020/chat/", volcano: "/frame.js",
libs: ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], panes: [
{name: "Header", help: "标题栏", pos: "head", state: ["time", "username"]},
{name: "River", help: "群聊组", pos: "left"},
{name: "Search", help: "搜索框", pos: "auto"},
{name: "River", help: "群聊组", pos: "left", action: ["创建", "刷新"]},
{name: "Action", help: "工作台", pos: "main"},
{name: "Search", help: "搜索框", pos: "float"},
{name: "Footer", help: "状态条", pos: "foot", state: ["ncmd" ]},
{name: "Footer", help: "状态条", pos: "foot", state: ["ncmd"]},
], main: {name: "Header", engine: "remote", list: ["/publish/order.js"]}, plugin: [
"/plugin/state.js", "/plugin/input.js", "/plugin/table.js",
],

View File

@ -1,28 +0,0 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can._output.innerHTML = "";
can.ui = can.page.Append(can, can._target, [
{view: ["content", "div"]}, {view: ["display", "pre"]},
])
can.onappend.table(can, msg, null, can.ui.content)
can.onappend.board(can, msg.Result(), can.ui.display)
var refresh = msg.Option("_refresh") || can.Conf("feature")["_refresh"]
refresh && can.core.Timer(refresh, function() {
can.run({})
})
return typeof cb == "function" && cb(msg)
},
})
Volcanos("onaction", {help: "控件交互", list: [],
onclick: function(event, can) {
can.run(event, [], function() {})
},
})
Volcanos("ondetail", {help: "控件交互", list: ["编辑", "删除"],
"编辑": function(event, can, key) {
console.log(key)
},
"删除": function(event, can, key) {
console.log(key)
},
})