mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 08:48:06 +08:00
add Ocean&River
This commit is contained in:
parent
e8706bbd0d
commit
ebf17c7d1b
41
frame.js
41
frame.js
@ -15,46 +15,57 @@ var can = Volcanos("chat", {
|
||||
page[item.name] = can.Pane(page, item.name, item, cb, can.page.Select(can, body, "fieldset."+item.name)[0] ||
|
||||
can.page.AppendField(can, body, item.name+" dialog", item))
|
||||
}, function() {typeof cb == "function" && cb(page)})
|
||||
})
|
||||
}, conf)
|
||||
return page.target = body, page
|
||||
}),
|
||||
Pane: shy("构造面板", function(can, name, meta, cb, field) {
|
||||
var option = field.querySelector("form.option");
|
||||
var action = field.querySelector("div.action");
|
||||
var output = field.querySelector("div.output");
|
||||
|
||||
var river = "", storm = "";
|
||||
|
||||
var pane = Volcanos(name, {type: "local",
|
||||
option: field.querySelector("form.option"),
|
||||
action: field.querySelector("div.action"),
|
||||
output: field.querySelector("div.output"),
|
||||
Plugin: can.Plugin, Inputs: can.Inputs, Output: can.Output,
|
||||
|
||||
Export: function(event, value, key) {can.Report(event, value, key)},
|
||||
Import: function(event, value, key) {var cb = pane.onimport[key];
|
||||
typeof cb == "function" && cb(event, pane, value, key, output);
|
||||
typeof cb == "function" && cb(event, pane, value, key, pane.output);
|
||||
},
|
||||
|
||||
Show: function(width, height) {field.style.display = "block";
|
||||
if (width > 0) {
|
||||
field.style.width = width + "px";
|
||||
if (width < 0) {field.style.left = -width / 2 + "px";
|
||||
field.style.width = (document.body.offsetWidth + width) / 2 + "px";
|
||||
}
|
||||
if (height < 0) {field.style.top = -height / 2 + "px";
|
||||
field.style.height = (document.body.offsetHeight + height) / 2 + "px";
|
||||
}
|
||||
if (width > 0) {field.style.width = width + "px";
|
||||
field.style.left = (document.body.offsetWidth - width) / 2 + "px";
|
||||
}
|
||||
if (height > 0) {
|
||||
field.style.height = height + "px";
|
||||
if (height > 0) {field.style.height = height + "px";
|
||||
field.style.top = (document.body.offsetHeight - height) / 2 + "px";
|
||||
}
|
||||
},
|
||||
Hide: function() {field.style.display = "none"},
|
||||
|
||||
run: function(event, cmds, cb) {var msg = pane.Event(event)
|
||||
can.page.Select(can, action, "input", function(item, index) {
|
||||
can.page.Select(can, pane.action, "input", function(item, index) {
|
||||
msg.Option(name, item.value)
|
||||
})
|
||||
can.run(event, option.dataset, cmds, cb)
|
||||
can.run(event, pane.option.dataset, cmds, cb)
|
||||
},
|
||||
}, Config.libs.concat(["pane/"+name]), function(pane) {
|
||||
pane.onimport._init && pane.onimport._init(pane, output, action, option, field)
|
||||
pane.onimport._init && pane.onimport._init(pane, pane.output, pane.action, pane.option, field)
|
||||
|
||||
function deal(event, value) {
|
||||
typeof pane.onaction[value] == "function" && pane.onaction[value](event, pane, meta, value, pane.output)
|
||||
}
|
||||
|
||||
can.page.Append(can, pane.action, can.core.List(pane.onaction.list, function(line) {
|
||||
return typeof line == "string"? {button: [line, deal]}: line.length > 0? {select: [line, deal]}: line
|
||||
}))
|
||||
typeof cb == "function" && cb(pane)
|
||||
})
|
||||
}, meta)
|
||||
return pane.target = field, pane
|
||||
}),
|
||||
Plugin: shy("构造插件", function(can, name, meta, run, field) {
|
||||
@ -119,7 +130,7 @@ var can = Volcanos("chat", {
|
||||
},
|
||||
}, Config.libs.concat(["plugin/"+(meta.type||"state")]), function(plugin) {
|
||||
can.core.Next(JSON.parse(meta.inputs||"[]"), plugin.Append)
|
||||
})
|
||||
}, meta)
|
||||
return plugin.target = field, field.Plugin = plugin
|
||||
}),
|
||||
Inputs: shy("构造控件", function(can, item, type, name, value, cb, option) {
|
||||
|
66
lib/page.js
66
lib/page.js
@ -63,15 +63,42 @@ Volcanos("page", {help: "网页模块",
|
||||
})
|
||||
|
||||
if (item.view) {var list = can.core.List(item.view);
|
||||
(list.length > 0 && list[0]) && can.page.ClassList.add(can, data, list[0])
|
||||
type = list[1] || "div"
|
||||
data.innerHTML = list[2] || data.innerHTML || ""
|
||||
name = name || list[3] || ""
|
||||
(list.length > 0 && list[0]) && can.page.ClassList.add(can, data, list[0]);
|
||||
type = list[1] || "div";
|
||||
data.innerHTML = list[2] || data.innerHTML || "";
|
||||
name = name || list[3] || "";
|
||||
|
||||
} else if (item.text) {var list = can.core.List(item.text);
|
||||
data.innerHTML = list[0] || data.innerHTML || ""
|
||||
type = list[1] || "span"
|
||||
list.length > 2 && (data.className = list[2])
|
||||
data.innerHTML = list[0] || data.innerHTML || "";
|
||||
type = list[1] || "span";
|
||||
list.length > 2 && (data.className = list[2]);
|
||||
|
||||
} else if (item.button) {var list = can.core.List(item.button);
|
||||
type = "button", name = name || list[0];
|
||||
data.innerText = list[0], data.onclick = function(event) {
|
||||
typeof list[1] == "function" && list[1](event, name);
|
||||
}
|
||||
|
||||
} else if (item.select) {var list = item.select;
|
||||
type = "select", name = name || list[0][0];
|
||||
data.onchange = function(event) {
|
||||
typeof list[1] == "function" && list[1](event, event.target.value);
|
||||
}
|
||||
item.list = list[0].slice(1).map(function(value) {
|
||||
return {type: "option", value: value, inner: value};
|
||||
})
|
||||
data.className = list[0][0] || ""
|
||||
|
||||
} else if (item.input) {var list = can.core.List(item.input);
|
||||
type = "input", name = name || list[0];
|
||||
data.onkeydown = function(event) {
|
||||
typeof list[1] == "function" && list[1](event);
|
||||
}
|
||||
data.onkeyup = function(event) {
|
||||
typeof list[2] == "function" && list[2](event);
|
||||
}
|
||||
} else if (item.row) {type = "tr"
|
||||
item.list = item.row.map(function(text) {return {text: [text, item.sub||"td"]}})
|
||||
}
|
||||
|
||||
|
||||
@ -88,7 +115,7 @@ Volcanos("page", {help: "网页模块",
|
||||
return target.innerHTML = "", can.page.Append(can, target, key, value)
|
||||
}),
|
||||
|
||||
AppendItem: shy("添加插件", function(can, target, list, click, cb) {
|
||||
AppendItem: shy("添加插件", function(can, target, list, click, cb, cbs) {
|
||||
can.core.List(list, function(line, index) {
|
||||
var item = can.page.Append(can, target, [{view: ["item "+line.key], list: [{text: [line.nick||line.key]}], click: function(event) {
|
||||
typeof cb == "function" && cb(event, line, item)
|
||||
@ -96,7 +123,15 @@ Volcanos("page", {help: "网页模块",
|
||||
can.page.ClassList.del(can, item, "select")
|
||||
})
|
||||
can.page.ClassList.add(can, item, "select")
|
||||
}}]).first
|
||||
}, data: {oncontextmenu: function(event) {
|
||||
can.user.carte(event, shy("", can.ondetail, can.ondetail.list, function(event, value, meta) {var cb = meta[value];
|
||||
typeof cb == "function"? cb(event, can, line, value, item, target):
|
||||
can.run(event, [typeof cb == "string"? cb: value, item], null, true)
|
||||
}))
|
||||
|
||||
event.stopPropagation()
|
||||
event.preventDefault()
|
||||
}}}]).first
|
||||
})
|
||||
|
||||
if (click === false) {return}
|
||||
@ -115,13 +150,18 @@ Volcanos("page", {help: "网页模块",
|
||||
]}]).first;
|
||||
return field;
|
||||
}),
|
||||
AppendTable: shy("添加表格", function(can, target, msg, list) {
|
||||
AppendTable: shy("添加表格", function(can, target, msg, list, cb, cbs) {
|
||||
var table = can.page.Append(can, target, "table");
|
||||
var tr = can.page.Append(can, table, "tr");
|
||||
can.core.List(list, function(key) {can.page.Append(can, tr, "th", key)});
|
||||
msg.Table(function(line) {var tr = can.page.Append(can, table, "tr");
|
||||
can.core.List(list, function(key) {can.page.Append(can, tr, "td", can.page.Display(line[key]))});
|
||||
})
|
||||
|
||||
can.page.Append(can, table, can.core.List(msg.Table(), function(line, index) {
|
||||
return {type: "tr", list: can.core.List(list, function(key) {var cbcb, cbcbs;
|
||||
typeof cb == "function" && (cbcb = function(event) {cb(event, line[key], key, index, event.target.parentNode, event.target)});
|
||||
typeof cbs == "function" && (cbcbs = function(event) {cbs(event, line[key], key, index, event.target.parentNode, event.target)});
|
||||
return {type: "td", inner: can.page.Display(line[key]), click: cbcb, oncontextmenu: cbcbs};
|
||||
})}
|
||||
}))
|
||||
return table;
|
||||
}),
|
||||
|
||||
|
42
lib/user.js
42
lib/user.js
@ -7,24 +7,11 @@ Volcanos("user", {help: "用户模块",
|
||||
toast: function(text) {},
|
||||
carte: function(event, cb) {},
|
||||
|
||||
Cookie: shy("会话变量", function(can, key, value, path) {
|
||||
function set(k, v) {document.cookie = k+"="+v+";path="+(path||"/")}
|
||||
|
||||
if (typeof key == "object") {
|
||||
for (var k in key) {set(k, key[k])}
|
||||
key = null
|
||||
}
|
||||
if (key == undefined) {var cs = {}
|
||||
document.cookie.split("; ").forEach(function(item) {
|
||||
var cookie = item.split("=")
|
||||
cs[cookie[0]] = cookie[1]
|
||||
})
|
||||
return cs
|
||||
}
|
||||
|
||||
value != undefined && set(key, value)
|
||||
var result = (new RegExp(key+"=([^;]*);?")).exec(document.cookie)
|
||||
return result && result.length > 0? result[1]: ""
|
||||
Share: shy("共享链接", function(can, objs, clear) {var obj = objs || {};
|
||||
!clear && can.core.Item(can.user.Search(), function(key, value) {obj[key] || (obj[key] = value)});
|
||||
return location.origin+location.pathname+(objs? "?"+can.core.Item(obj, function(key, value) {
|
||||
return can.core.List(value, function(value) {return key+"="+encodeURIComponent(value)}).join("&");
|
||||
}).join("&"): "");
|
||||
}),
|
||||
Search: shy("请求参数", function(can, key, value) {var args = {}
|
||||
location.search && location.search.slice(1).split("&").forEach(function(item) {var x = item.split("=")
|
||||
@ -47,6 +34,25 @@ Volcanos("user", {help: "用户模块",
|
||||
return key+"="+encodeURIComponent(value)
|
||||
}).join("&")
|
||||
}),
|
||||
Cookie: shy("会话变量", function(can, key, value, path) {
|
||||
function set(k, v) {document.cookie = k+"="+v+";path="+(path||"/")}
|
||||
|
||||
if (typeof key == "object") {
|
||||
for (var k in key) {set(k, key[k])}
|
||||
key = null
|
||||
}
|
||||
if (key == undefined) {var cs = {}
|
||||
document.cookie.split("; ").forEach(function(item) {
|
||||
var cookie = item.split("=")
|
||||
cs[cookie[0]] = cookie[1]
|
||||
})
|
||||
return cs
|
||||
}
|
||||
|
||||
value != undefined && set(key, value)
|
||||
var result = (new RegExp(key+"=([^;]*);?")).exec(document.cookie)
|
||||
return result && result.length > 0? result[1]: ""
|
||||
}),
|
||||
|
||||
isWeiXin: navigator.userAgent.indexOf("MicroMessenger") > -1,
|
||||
isMobile: navigator.userAgent.indexOf("Mobile") > -1,
|
||||
|
4
order.js
4
order.js
@ -3,6 +3,7 @@ var Config = {
|
||||
"page/chat",
|
||||
"pane/Toast", "pane/Carte", "pane/Debug",
|
||||
"pane/River", "pane/Storm", "pane/Action",
|
||||
"pane/Ocean", "pane/Steam",
|
||||
"plugin/state", "plugin/input", "plugin/table", "plugin/inner",
|
||||
],
|
||||
libs: ["lib/base", "lib/core", "lib/misc", "lib/page", "lib/user"],
|
||||
@ -14,5 +15,8 @@ var Config = {
|
||||
{group: "index", name: "River"},
|
||||
{group: "index", name: "Storm"},
|
||||
{group: "index", name: "Action"},
|
||||
|
||||
{group: "index", name: "Steam"},
|
||||
{group: "index", name: "Ocean"},
|
||||
],
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [],
|
||||
init: function(can, msg, output) {output.innerHTML = "";
|
||||
init: function(event, can, msg, key, output) {output.innerHTML = "";
|
||||
msg.Table(function(item, index) {if (!item.name) {return}
|
||||
can[item.name] = can.Plugin(can, item.name, item, function(event, cmds, cbs) {
|
||||
can.run(event, [item.river, item.storm, item.action].concat(cmds), cbs)
|
||||
@ -7,6 +7,7 @@ Volcanos("onimport", {help: "导入数据", list: [],
|
||||
})
|
||||
},
|
||||
river: function(event, can, value, key, output) {
|
||||
if (value == "update") {return}
|
||||
can.Conf("temp_river", value)
|
||||
},
|
||||
storm: function(event, can, value, key, output) {
|
||||
@ -16,7 +17,7 @@ Volcanos("onimport", {help: "导入数据", list: [],
|
||||
can.Conf("storm", value)
|
||||
if (!can.Cache(can.Conf("river")+"."+can.Conf("storm"), output)) {
|
||||
can.run(event, [can.Conf("river"), can.Conf("storm")], function(msg) {
|
||||
can.onimport.init(can, msg, output)
|
||||
can.onimport.init(event, can, msg, key, output)
|
||||
})
|
||||
}
|
||||
},
|
||||
@ -52,11 +53,11 @@ Volcanos("ondetail", {help: "组件详情", list: ["选择", "修改", "删除",
|
||||
}, true)
|
||||
}}}])
|
||||
},
|
||||
"复制": function(event, can, msg, value, index, key, target) {
|
||||
can.user.toast(can.page.CopyText(can, target.innerHTML), "复制成功")
|
||||
"复制": function(event, can, msg, value, index, key, td) {
|
||||
can.user.toast(can.page.CopyText(can, td.innerHTML), "复制成功")
|
||||
},
|
||||
"下载": function(event, can, msg, value, index, key, target) {
|
||||
can.page.Download(can, key, target.innerHTML);
|
||||
"下载": function(event, can, msg, value, index, key, td) {
|
||||
can.page.Download(can, key, td.innerHTML);
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: [],
|
||||
@ -70,5 +71,3 @@ Volcanos("onexport", {help: "导出数据", list: [],
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
@ -2,7 +2,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, outpu
|
||||
can.user.carte = function(event, cb) {if (!cb || !cb.list || cb.list.length == 0) {return}
|
||||
output.innerHTML = "", can.page.AppendItem(can, output, can.core.List(cb.list, function(item) {
|
||||
return {key: item};
|
||||
}), "", function(event, line, item) {
|
||||
}), false, function(event, line, item) {
|
||||
typeof cb == "function" && cb(event, line.key, cb.meta)
|
||||
})
|
||||
|
||||
|
@ -1,54 +1,8 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [],
|
||||
init: function(can, field, option, action, output) {output.innerHTML = "";
|
||||
},
|
||||
})
|
||||
Volcanos("onaction", {help: "组件交互", list: [],
|
||||
})
|
||||
Volcanos("onchoice", {help: "组件菜单", list: ["返回", "清空", "复制", "下载", "表格", "绘图", "媒体"],
|
||||
"返回": function(event, can, msg, value, target) {
|
||||
can.run(event, ["", "Last"])
|
||||
},
|
||||
"清空": function(event, can, msg, value, target) {
|
||||
can.target.innerHTML = "";
|
||||
},
|
||||
"复制": function(event, can, msg, value, target) {
|
||||
var list = can.onexport.Format(can, msg, "data");
|
||||
can.user.toast(can.page.CopyText(can, list[2]), "复制成功")
|
||||
},
|
||||
"下载": function(event, can, msg, value, target) {
|
||||
var list = can.onexport.Format(can, msg, msg._plugin_name||"data");
|
||||
can.page.Download(can, list[0]+list[1], list[2]);
|
||||
},
|
||||
})
|
||||
Volcanos("ondetail", {help: "组件详情", list: ["选择", "修改", "删除", "复制", "下载"],
|
||||
"选择": "select",
|
||||
"删除": "delete",
|
||||
"修改": function(event, can, msg, value, index, key, td) {
|
||||
var text = td.innerHTML;
|
||||
can.page.Appends(can, td, [{type: "input", style: {width: td.clientWidth+"px"}, data: {onkeydown: function(event) {
|
||||
if (event.key != "Enter") {return}
|
||||
can.run(event, [index, "modify", key == "value" && msg.key? msg[key][index]: key, event.target.value,], function(msg) {
|
||||
td.innerHTML = event.target.value;
|
||||
can.user.toast("修改成功")
|
||||
}, true)
|
||||
}}}])
|
||||
},
|
||||
"复制": function(event, can, msg, value, index, key, target) {
|
||||
can.user.toast(can.page.CopyText(can, target.innerHTML), "复制成功")
|
||||
},
|
||||
"下载": function(event, can, msg, value, index, key, target) {
|
||||
can.page.Download(can, key, target.innerHTML);
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: [],
|
||||
Format: function(can, msg, name) {
|
||||
var ext = ".csv", txt = can.page.Select(can, can.target, "tr", function(tr) {
|
||||
return can.page.Select(can, tr, "td,th", function(td) {return td.innerText}).join(",")
|
||||
}).join("\n");
|
||||
|
||||
!txt && (ext = ".txt", txt = msg.result && msg.result.join("") || "");
|
||||
return [name, ext, txt]
|
||||
},
|
||||
})
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, output, action, option, field) {
|
||||
}})
|
||||
Volcanos("onaction", {help: "组件交互", list: []})
|
||||
Volcanos("onchoice", {help: "组件菜单", list: []})
|
||||
Volcanos("ondetail", {help: "组件详情", list: []})
|
||||
Volcanos("onexport", {help: "导出数据", list: []})
|
||||
|
||||
|
||||
|
63
pane/Ocean.js
Normal file
63
pane/Ocean.js
Normal file
@ -0,0 +1,63 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [],
|
||||
_init: function(can, output, action, option, field) {output.innerHTML = "";
|
||||
var ui = can.page.Append(can, field, [{view: ["create"], list: [
|
||||
{input: ["name"], title: "群聊名称"},
|
||||
{button: ["创建群聊", function(event) {
|
||||
if (!ui.name.value) {ui.name.focus(); can.user.toast("请输入群名"); return}
|
||||
|
||||
var list = can.page.Select(can, ui.list, "tr", function(item) {
|
||||
return item.dataset.user
|
||||
})
|
||||
if (list.length == 0) {can.user.toast("请添加组员"); return}
|
||||
|
||||
can.run(event, ["spawn", "", ui.name.value].concat(list), function(msg) {
|
||||
can.Hide(), can.Export(event, "update", "river");
|
||||
})
|
||||
}]}, {name: "list", view: ["list", "table"], list: [{text: ["2. 已选用户列表", "caption"]}]},
|
||||
]}])
|
||||
can.ui = ui
|
||||
},
|
||||
init: function(event, can, msg, key, output) {output.innerHTML = "";
|
||||
var table = can.page.Append(can, output, "table");
|
||||
can.page.Append(can, table, [{text: ["1. 选择用户节点 ->", "caption"]}])
|
||||
|
||||
can.page.AppendTable(can, table, msg, ["key", "user.route"], function(event, value, key, index, tr, td) {
|
||||
tr.className = "hidden";
|
||||
var uis = kit.AppendChild(can.ui.list, [{type: "tr", list: [{text: [key, "td"]}, {text: [msg["user.route"][index], "td"]}], dataset: {user: key}, click: function(event) {
|
||||
tr.className = "normal", uis.last.parentNode.removeChild(uis.last)
|
||||
}}])
|
||||
})
|
||||
},
|
||||
ocean: function(event, can, value, key, output) {
|
||||
if (value == "create") {can.Show();
|
||||
can.run(event, [], function(msg) {
|
||||
can.onimport.init(event, can, msg, key, output);
|
||||
});
|
||||
}
|
||||
},
|
||||
})
|
||||
Volcanos("onaction", {help: "组件交互", list: ["关闭", "刷新"],
|
||||
"关闭": function(event, can, meta, key, output) {
|
||||
can.Hide()
|
||||
},
|
||||
"刷新": function(event, can, meta, key, output) {
|
||||
can.run(event, [], function(msg) {
|
||||
can.onimport.init(event, can, msg, key, output)
|
||||
})
|
||||
},
|
||||
})
|
||||
Volcanos("onchoice", {help: "组件菜单", list: ["关闭", "刷新"],
|
||||
"关闭": function(event, can, msg, key, target) {
|
||||
can.onaction[key](event, can, key, can.output)
|
||||
},
|
||||
"刷新": function(event, can, msg, key, target) {
|
||||
can.onaction[key](event, can, key, can.output)
|
||||
},
|
||||
})
|
||||
Volcanos("ondetail", {help: "组件详情", list: ["共享"],
|
||||
"共享": function(event, can, line, key, target) {
|
||||
can.user.toast(can.user.Share(can, {river: line.key}), "共享链接", 10000)
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: []})
|
||||
|
@ -1,64 +1,44 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [],
|
||||
init: function(can, msg, output) {output.innerHTML = "";
|
||||
init: function(event, can, msg, key, output) {output.innerHTML = "";
|
||||
can.page.AppendItem(can, output, msg.Table(), can.user.Search(can, "river"), function(event, line, item) {
|
||||
can.Export(event, line.key, "river")
|
||||
})
|
||||
},
|
||||
username: function(event, can, value, key, output) {
|
||||
can.run(event, [], function(msg) {
|
||||
can.onimport.init(can, msg, output)
|
||||
can.onimport.init(event, can, msg, key, output)
|
||||
})
|
||||
},
|
||||
river: function(event, can, value, key, output) {
|
||||
if (value == "update") {
|
||||
can.run(event, [], function(msg) {
|
||||
can.onimport.init(event, can, msg, key, output)
|
||||
})
|
||||
}
|
||||
},
|
||||
})
|
||||
Volcanos("onaction", {help: "组件交互", list: ["创建", "刷新"],
|
||||
"创建": function(event, can, meta, key, output) {
|
||||
can.Export(event, "create", "ocean")
|
||||
},
|
||||
"刷新": function(event, can, meta, key, output) {
|
||||
can.run(event, [], function(msg) {
|
||||
can.onimport.init(event, can, msg, key, output)
|
||||
})
|
||||
},
|
||||
})
|
||||
Volcanos("onaction", {help: "组件交互", list: [],
|
||||
})
|
||||
Volcanos("onchoice", {help: "组件菜单", list: ["返回", "清空", "复制", "下载", "表格", "绘图", "媒体"],
|
||||
"返回": function(event, can, msg, value, target) {
|
||||
can.run(event, ["", "Last"])
|
||||
Volcanos("onchoice", {help: "组件菜单", list: ["创建", "刷新"],
|
||||
"创建": function(event, can, msg, key, target) {
|
||||
can.Export(event, "create", "ocean")
|
||||
},
|
||||
"清空": function(event, can, msg, value, target) {
|
||||
can.target.innerHTML = "";
|
||||
},
|
||||
"复制": function(event, can, msg, value, target) {
|
||||
var list = can.onexport.Format(can, msg, "data");
|
||||
can.user.toast(can.page.CopyText(can, list[2]), "复制成功")
|
||||
},
|
||||
"下载": function(event, can, msg, value, target) {
|
||||
var list = can.onexport.Format(can, msg, msg._plugin_name||"data");
|
||||
can.page.Download(can, list[0]+list[1], list[2]);
|
||||
"刷新": function(event, can, msg, key, target) {
|
||||
can.onaction[key](event, can, key, can.output)
|
||||
},
|
||||
})
|
||||
Volcanos("ondetail", {help: "组件详情", list: ["选择", "修改", "删除", "复制", "下载"],
|
||||
"选择": "select",
|
||||
"删除": "delete",
|
||||
"修改": function(event, can, msg, value, index, key, td) {
|
||||
var text = td.innerHTML;
|
||||
can.page.Appends(can, td, [{type: "input", style: {width: td.clientWidth+"px"}, data: {onkeydown: function(event) {
|
||||
if (event.key != "Enter") {return}
|
||||
can.run(event, [index, "modify", key == "value" && msg.key? msg[key][index]: key, event.target.value,], function(msg) {
|
||||
td.innerHTML = event.target.value;
|
||||
can.user.toast("修改成功")
|
||||
}, true)
|
||||
}}}])
|
||||
},
|
||||
"复制": function(event, can, msg, value, index, key, target) {
|
||||
can.user.toast(can.page.CopyText(can, target.innerHTML), "复制成功")
|
||||
},
|
||||
"下载": function(event, can, msg, value, index, key, target) {
|
||||
can.page.Download(can, key, target.innerHTML);
|
||||
Volcanos("ondetail", {help: "组件详情", list: ["共享"],
|
||||
"共享": function(event, can, line, key, target) {
|
||||
can.user.toast(can.user.Share(can, {river: line.key}), "共享链接", 10000)
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: [],
|
||||
Format: function(can, msg, name) {
|
||||
var ext = ".csv", txt = can.page.Select(can, can.target, "tr", function(tr) {
|
||||
return can.page.Select(can, tr, "td,th", function(td) {return td.innerText}).join(",")
|
||||
}).join("\n");
|
||||
|
||||
!txt && (ext = ".txt", txt = msg.result && msg.result.join("") || "");
|
||||
return [name, ext, txt]
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
|
||||
Volcanos("onexport", {help: "导出数据", list: []})
|
||||
|
||||
|
88
pane/Steam.js
Normal file
88
pane/Steam.js
Normal file
@ -0,0 +1,88 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [],
|
||||
_init: function(can, output, action, option, field) {output.innerHTML = "";
|
||||
var device = can.page.Append(can, field, [{"view": ["device", "table"]}]).last
|
||||
var ui = can.page.Append(can, field, [{view: ["create"], list: [
|
||||
{title: "应用名称", input: ["name"]}, {button: ["创建应用", function(event) {
|
||||
if (!ui.name.value) {ui.name.focus(); can.user.toast("请输入群名"); return}
|
||||
|
||||
var list = []
|
||||
can.page.Select(can, ui.list, "tr", function(item) {
|
||||
list.push(item.dataset.pod)
|
||||
list.push(item.dataset.group)
|
||||
list.push(item.dataset.index)
|
||||
list.push(item.dataset.name)
|
||||
})
|
||||
|
||||
can.run(event, [can.Conf("river"), "spawn", ui.name.value].concat(list), function(msg) {
|
||||
can.Hide(), can.Export(event, "update", "ocean");
|
||||
})
|
||||
}]}, {name: "list", view: ["list", "table"], list: [{text: ["3. 已选命令列表", "caption"]}]},
|
||||
]}])
|
||||
can.device = device
|
||||
can.ui = ui
|
||||
},
|
||||
init: function(event, can, msg, key, output) {output.innerHTML = ""; can.Show();
|
||||
var table = can.page.Append(can, output, "table")
|
||||
|
||||
can.page.Append(can, table, [{text: ["1. 选择用户节点 ->", "caption"]}])
|
||||
can.page.AppendTable(can, table, msg, ["user", "node"], function(event, value, key, index, tr, td) {
|
||||
|
||||
can.page.Select(can, table, "tr.select", function(item) {can.page.ClassList.del(can, item, "select")})
|
||||
can.page.ClassList.add(can, tr, "select")
|
||||
|
||||
var node = msg.node[index];
|
||||
can.run(event, [can.Conf("river"), msg.user[index], node], function(com) {
|
||||
can.page.Append(can, can.device, [{text: ["2. 选择模块命令 ->", "caption"]}])
|
||||
can.page.AppendTable(can, can.device, com, ["key", "index", "name", "help"], function(event, value, key, index, tr, td) {
|
||||
|
||||
var last = can.page.Append(can, can.ui.list, [{
|
||||
row: [com.key[index], com.index[index], com.name[index], com.help[index]],
|
||||
dataset: {pod: node, group: com.key[index], index: com.index[index], name: com.name[index]},
|
||||
click: function(event) {last.parentNode.removeChild(last)},
|
||||
}]).first
|
||||
|
||||
}, function(event, value, key, index, tr, td) {
|
||||
can.user.carte(event, shy(can.ondetail, can.ondetail.list, function(event, key, meta) {
|
||||
meta[key](event, can, msg, key, td)
|
||||
}))
|
||||
})
|
||||
})
|
||||
}), table.querySelector("td").click()
|
||||
},
|
||||
steam: function(event, can, value, key, output) {
|
||||
if (value == "create") {
|
||||
can.run(event, [can.Conf("river")], function(msg) {
|
||||
can.onimport.init(event, can, msg, key, output);
|
||||
});
|
||||
}
|
||||
},
|
||||
river: function(event, can, value, key, output) {
|
||||
if (value == "update") {return}
|
||||
can.Conf("river", value)
|
||||
},
|
||||
})
|
||||
Volcanos("onaction", {help: "组件交互", list: ["关闭", "刷新"],
|
||||
"关闭": function(event, can, meta, key, output) {
|
||||
can.Hide()
|
||||
},
|
||||
"刷新": function(event, can, meta, key, output) {
|
||||
can.run(event, [], function(msg) {
|
||||
can.onimport.init(event, can, msg, key, output)
|
||||
})
|
||||
},
|
||||
})
|
||||
Volcanos("onchoice", {help: "组件菜单", list: ["关闭", "刷新"],
|
||||
"关闭": function(event, can, msg, key, target) {
|
||||
can.onaction[key](event, can, key, can.output)
|
||||
},
|
||||
"刷新": function(event, can, msg, key, target) {
|
||||
can.onaction[key](event, can, key, can.output)
|
||||
},
|
||||
})
|
||||
Volcanos("ondetail", {help: "组件详情", list: ["共享"],
|
||||
"共享": function(event, can, line, value, target) {
|
||||
can.user.toast(can.user.Share(can, {storm: line.key}), "共享链接", 10000)
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: []})
|
||||
|
@ -1,29 +1,39 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [],
|
||||
init: function(can, msg, output) {output.innerHTML = "";
|
||||
init: function(event, can, msg, key, output) {output.innerHTML = "";
|
||||
can.page.AppendItem(can, output, msg.Table(), can.user.Search(can, "storm"), function(event, line, item) {
|
||||
can.Export(event, line.key, "storm")
|
||||
})
|
||||
},
|
||||
river: function(event, can, value, key, output) {
|
||||
if (value == "update") {return}
|
||||
|
||||
can.run(event, [value], function(msg) {
|
||||
can.onimport.init(can, msg, output)
|
||||
can.onimport.init(event, can, msg, key, output)
|
||||
})
|
||||
},
|
||||
})
|
||||
Volcanos("onaction", {help: "组件交互", list: [],
|
||||
Volcanos("onaction", {help: "组件交互", list: ["创建", "刷新"],
|
||||
"创建": function(event, can, meta, key, output) {
|
||||
can.Export(event, "create", "steam")
|
||||
},
|
||||
"刷新": function(event, can, meta, key, output) {
|
||||
can.run(event, [], function(msg) {
|
||||
can.onimport.init(event, can, msg, key, output)
|
||||
})
|
||||
},
|
||||
})
|
||||
Volcanos("onchoice", {help: "组件菜单", list: ["返回", "清空", "复制", "下载", "表格", "绘图", "媒体"],
|
||||
"返回": function(event, can, msg, value, target) {
|
||||
"返回": function(event, can, msg, key, target) {
|
||||
can.run(event, ["", "Last"])
|
||||
},
|
||||
"清空": function(event, can, msg, value, target) {
|
||||
"清空": function(event, can, msg, key, target) {
|
||||
can.target.innerHTML = "";
|
||||
},
|
||||
"复制": function(event, can, msg, value, target) {
|
||||
"复制": function(event, can, msg, key, target) {
|
||||
var list = can.onexport.Format(can, msg, "data");
|
||||
can.user.toast(can.page.CopyText(can, list[2]), "复制成功")
|
||||
},
|
||||
"下载": function(event, can, msg, value, target) {
|
||||
"下载": function(event, can, msg, key, target) {
|
||||
var list = can.onexport.Format(can, msg, msg._plugin_name||"data");
|
||||
can.page.Download(can, list[0]+list[1], list[2]);
|
||||
},
|
||||
@ -48,16 +58,7 @@ Volcanos("ondetail", {help: "组件详情", list: ["选择", "修改", "删除",
|
||||
can.page.Download(can, key, target.innerHTML);
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: [],
|
||||
Format: function(can, msg, name) {
|
||||
var ext = ".csv", txt = can.page.Select(can, can.target, "tr", function(tr) {
|
||||
return can.page.Select(can, tr, "td,th", function(td) {return td.innerText}).join(",")
|
||||
}).join("\n");
|
||||
|
||||
!txt && (ext = ".txt", txt = msg.result && msg.result.join("") || "");
|
||||
return [name, ext, txt]
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: []})
|
||||
|
||||
|
||||
|
||||
|
@ -12,7 +12,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, outpu
|
||||
|
||||
var toast = can.page.Appends(can, output, list)
|
||||
var width = text.width||text.text.length*10+10
|
||||
can.Show(width>400?400:width, text.height||80)
|
||||
width = width>400?400:width
|
||||
width = width<100?100:width
|
||||
can.Show(width, text.height||80)
|
||||
|
||||
var begin = can.base.Time().split(" ")[1]
|
||||
var timer = can.Timer({value: 1000, length: text.duration > 0? text.duration/1000: text.duration}, function(t, i) {
|
||||
|
7
proto.js
7
proto.js
@ -158,13 +158,12 @@ function Volcanos(name, can, libs, cb, msg) { // 封装模块
|
||||
})});
|
||||
|
||||
can.target.oncontextmenu = function(event) {
|
||||
can.user.carte(event, shy("", can.onchoice, can.onchoice.list, function(event, value, meta) {var cb = meta[value];
|
||||
typeof cb == "function"? cb(event, can, msg, value, event.target):
|
||||
can.run(event, [typeof cb == "string"? cb: value, event.target], null, true)
|
||||
can.user.carte(event, shy("", can.onchoice, can.onchoice.list, function(event, key, meta) {var cb = meta[key];
|
||||
typeof cb == "function"? cb(event, can, msg, key, event.target):
|
||||
can.run(event, [typeof cb == "string"? cb: key, event.target], null, true)
|
||||
}))
|
||||
event.stopPropagation()
|
||||
event.preventDefault()
|
||||
return true
|
||||
}
|
||||
}, 10);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user