1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 08:48:06 +08:00

add search

This commit is contained in:
shaoying 2020-06-22 08:53:24 +08:00
parent 740554ce81
commit 4d6c3f18a4
11 changed files with 152 additions and 79 deletions

View File

@ -68,7 +68,7 @@ Volcanos("onengine", { _init: function(can, meta, list, cb, target) {
var action = storm && storm.action && storm.action[cmds[2]]
if (!storm) { break } if (cmds.length == 2) {
if (storm.index) {
can.misc.Run(event, can, {names: pane._name}, [river.name, storm.name, "index"].concat(storm.index), cb)
can.misc.Run(event, can, {names: pane._name}, [river.name, storm.name, "order"].concat(storm.index), cb)
return true
}
@ -149,6 +149,7 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) { met
if (can.user.Search(can, "share") && can.user.Search(can, "river") && can.user.Search(can, "storm")) {
can.page.Select(can, field, "legend", function(item) { can.page.Remove(can, item) })
}
sub.onaction && can.onappend._action(sub, sub._action, sub.onaction.list)
meta.detail = meta.feature["detail"] || {}
sub.onimport._init(sub, sub.Conf(meta), list, function() {}, field);
@ -260,14 +261,16 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) { met
},
_action: function(can, action, list) { // [string [class item...] {}]
action && (action.innerHTML = ""), can.onaction && can.core.List(list||can.onaction.list, function(item) {
item === ""? can.page.Append(can, action, [{view: "item space"}]):
typeof item == "string"? can.onappend.input(can, action, "input", {type: "button", value: item, onclick: function(event) {
item === ""? /*空白*/ can.page.Append(can, action, [{view: "item space"}]):
typeof item == "string"? /*按键*/ can.onappend.input(can, action, "input", {type: "button", value: item, onclick: function(event) {
var cb = can.onaction[item] || can.onkeymap && can.onkeymap._remote
cb? cb(event, can, item): can.run(event, ["action", item], function(msg) {}, true)
}}): item.length > 0? can.onappend.input(can, action, "input", {type: "select", values: item.slice(1), name: item[0], onchange: function(event) {
}}): item.length > 0? /*列表*/ can.onappend.input(can, action, "input", {type: "select", values: item.slice(1), name: item[0], onchange: function(event) {
var cb = can.onaction[item[0]]
cb && cb(event, can, item[0], item[event.target.selectedIndex+1])
}}): typeof item == "object" && can.page.Append(can, action, [item])
}}): item.input? /*文本*/ can.page.Append(can, action, [{view: "item", list: [{type: "input", name: item.input[0], onkeydown: function(event) {
item.input[1](event, can)
}}] }]): typeof item == "object" && /*其它*/ can.page.Append(can, action, [item])
})
},
_detail: function(can, msg, list, target) {
@ -481,8 +484,8 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) { met
}
return ui
},
share: function(can, msg, name, text) {
can.run(msg._event, ["action", "share"], function(msg) {
share: function(can, msg, cmd) {
can.run(msg._event, cmd||["action", "share"], function(msg) {
var src = can.user.Share(can, {_path: "/share/"+msg.Result()}, true);
var ui = can.onappend.toast(can, {title: can.page.Format("a", src, msg.Result()), text: can.page.Format("img", src+"/share"),
width: 300, height: 300, duration: 100000, button: [{button: ["确定", function(event) {

View File

@ -1,14 +1,11 @@
Volcanos({name: "demo", volcano: "/frame.js", iceberg: "/chat/", intshell: "plug.sh",
libs: ["/lib/base", "/lib/core", "/lib/misc", "/lib/page", "/lib/user"], panes: [
{type: "pane", name: "Header", help: "标题栏", pos: "head", list: ["/pane/Header.js", "/pane/Header.css"], state: [
"time", "username",
]},
{type: "pane", name: "River", help: "群聊组", pos: "left", list: ["/pane/River.js", "/pane/River.css"]},
{type: "pane", name: "Storm", help: "应用流", pos: "right", list: ["/pane/Storm.js", "/pane/Storm.css"]},
{type: "pane", name: "Action", help: "工作台", pos: "middle", list: ["/pane/Action.js", "/pane/Action.css"]},
{type: "pane", name: "Footer", help: "状态条", pos: "foot", list: ["/pane/Footer.js", "/pane/Footer.css"], state: [
"ncmd",
]},
{name: "Header", help: "标题栏", pos: "head", state: ["time", "username"]},
{name: "River", help: "群聊组", pos: "left"},
{name: "Storm", help: "应用流", pos: "right"},
{name: "Action", help: "工作台", pos: "middle"},
{name: "Search", help: "搜索框", pos: "float"},
{name: "Footer", help: "状态条", pos: "foot", state: ["ncmd" ]},
], main: {name: "Header", engine: "remote", list: ["/publish/order.js"]}, plugin: [
"/plugin/state.js",
"/plugin/table.js",

View File

@ -6,20 +6,13 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
},
})
Volcanos("ondetail", {help: "交互菜单", list: ["共享", "更名", "删除"],
"共享": function(event, can, value, sub) {
console.log(sub.Option())
var msg = sub.request(event)
msg.Option("_pod", can.user.Search(can, "pod"))
msg.Option("_name", value.name)
msg.Option("_text", value.help)
msg.Option("_node", value.pod)
msg.Option("_group", value.group)
msg.Option("_index", value.index)
msg.Option("_args", JSON.stringify(can.core.Item(sub.Option(), function(key, value) { return value })))
msg.Option("_value", JSON.stringify(sub.Option()))
msg.Option("storm", can.Conf("storm"))
msg.Option("river", can.Conf("river"))
can.onappend.share(can, msg)
"共享": 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||"", value.group||"", value.index, JSON.stringify(can.core.Item(sub.Option(), function(key, value) { return value })),
JSON.stringify(sub.Option())
])
can.onappend.share(can, msg, list)
},
})
Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg, list, cb, target) { var key = "action";

View File

@ -1,8 +1,7 @@
Volcanos("onimport", {help: "导入数据", list: [],
_init: function(can, meta, list, cb, target) { },
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb, target) {
},
})
Volcanos("onaction", {help: "交互数据", list: [],
_init: function(can, msg, list, cb, target) {
Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) {
can.onexport._init(can, msg, list, cb, target)
},
ncmd: function(can, msg, list, cb, target) {
@ -11,9 +10,8 @@ Volcanos("onaction", {help: "交互数据", list: [],
})
},
})
Volcanos("onexport", {help: "导出数据", list: [],
_init: function(can, msg, list, cb, target) {
can.run({}, [], function(msg) { can._output.innerHTML = "";
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]}])
})

View File

@ -14,6 +14,17 @@ fieldset.Header>div.output>div.title:hover {
background-color:red;
border:ridge 2px yellow;
}
fieldset.Header>div.output>div.search {
margin-left:20px;
float:left;
}
fieldset.Header>div.output>div.search>input {
width:120px;
}
fieldset.Header>div.output>div.search>input:focus {
width:240px;
}
fieldset.Header>div.output>div.state {
cursor:pointer;

View File

@ -4,29 +4,25 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta,
Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) {
function init() {
can.onexport._init(can, msg, list, function() {
can.user.title(can.user.Search(can, "pod"));
can.run(msg._event, ["search", "River.onaction._init"]);
can.run(msg._event, ["search", "Footer.onaction._init"]);
can.user.title(can.user.Search(can, "pod"))
can.run(msg._event, ["search", "River.onaction._init"])
can.run(msg._event, ["search", "Footer.onaction._init"])
}, target)
}
can.run({}, ["check"], function(msg) {
if (msg.Result()) { return init() }
can.run({}, ["check"], function(msg) { if (msg.Result()) { return init() }
var ui = can.user.input({}, can, [
{username: "username", name: "用户"},
{password: "password", name: "密码"},
{button: [["登录", function(event) {
var username = ui["用户"].value
var password = ui["密码"].value
can.run({}, ["login", username, password], function(msg) {
if (msg.Result()) {
can.page.Remove(can, ui.first)
return init()
}
can.run({}, ["login", ui["用户"].value, ui["密码"].value], function(msg) {
if (msg.Result()) { can.page.Remove(can, ui.first); return init() }
can.user.alert("用户或密码错误")
})
}], "扫码"]},
}], ["扫码", function(event) {
// TODO
}]]},
], function(event, button, data, list) {
// TODO
})
})
},
@ -45,7 +41,7 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
},
})
Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg, list, cb, target) {
can.run(msg._event, [], function(msg) { can._output.innerHTML = "";
can.run(msg._event, [], function(msg) { can._output.innerHTML = ""
can.Conf("username", msg.Option("user.nick")||msg.Option("user.name"))
can.core.List(msg.result||["github.com/shylinux/contexts"], function(title) {
@ -53,6 +49,7 @@ Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg,
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) },
@ -63,6 +60,24 @@ Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg,
can.onexport.time(event, can, "time", item)
})
})
var search = can.page.Append(can, can._output, [{view: "search", list: [{type: "input",
onfocus: function(event) {
},
onkeydown: function(event) {
switch (event.key) {
case "Enter":
can.run(event, ["search", "Search.onimport.input", event.target.value], function() {
})
}
},
}]}]).input
document.body.onkeydown = function(event) {
event.key == "Space" && search.focus()
}
typeof cb == "function" && cb()
})
},

View File

@ -18,20 +18,18 @@ Volcanos("ondetail", {help: "菜单交互", list: ["添加用户", "重命名",
console.log(river, button)
},
})
Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg, list, cb, target) { var key = "river";
Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg, list, cb, target) { var key = "river"
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 view = can.onappend.item(can, can._output, "item", value, function(event, item) { var msg = can.request(event, {_msg: sup})
// 左键点击
msg.Option(key, can.Conf(key, value.key)), can.run(event, ["search", "Storm.onaction._init"]);
msg.Option(key, can.Conf(key, value.key)), can.run(event, ["search", "Storm.onaction._init"])
}, function(event) {
// 右键点击
can.onappend.menu(can, msg, value)
});
})
if (index == 0 || [value.key, value.name].indexOf(can.user.Search(can, key)) > -1) {
select = view
}
}); select && select.click(); typeof cb == "function" && cb(sup); })
if (index == 0 || [value.key, value.name].indexOf(can.user.Search(can, key)) > -1) { select = view }
}); select && select.click(), typeof cb == "function" && cb(sup) })
},
key: function(can, msg) { msg.Option("river", can.Conf("river")) },
})

22
pane/Search.css Normal file
View File

@ -0,0 +1,22 @@
fieldset.Search {
display:none;
position:absolute;
left:120px;
top:40px;
background:black;
}
fieldset.Search div.output div.content {
max-height:400px;
max-width:1000px;
overflow:auto;
}
fieldset.Search div.output div.display {
position:sticky;
max-height:200px;
max-width:1000px;
overflow:auto;
}
fieldset.Search div.output div.display:hover {
max-height:400px;
}

40
pane/Search.js Normal file
View File

@ -0,0 +1,40 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb) {
typeof cb == "function" && cb()
},
input: function(can, msg, cmd, cb) { can._output.innerHTML = ""
can.ui = can.page.Append(can, can._output, [{view: "content"}, {view: "display"}])
can.page.Modify(can, can._target, {style: {display: "block"}})
can.page.Select(can, can._action, "input[name=word]", function(item) { item.value = cmd[0] })
can.run({}, cmd, function(msg) {
can.onappend.table(can, can.ui.content, "table", msg, function(value, key, index, line) {
return {text: [value, "td"], onclick: function(event) {
can.run(event, [line.type, line.name, line.text], function(msg) {
can.ui.display.innerHTML = ""
can.onappend.table(can, can.ui.display, "table", msg)
can.onappend.board(can, can.ui.display, "board", msg)
})
}}
ca.run(event, [""])
})
can.onappend.board(can, can.ui.content, "board", msg)
})
},
})
Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "下载", "渲染", "执行", "收藏", "搜索"], _init: function(can, msg, list, cb, target) {
can.onexport._init(can, msg, list, cb, target)
},
"关闭": function(event, can, key) {
can.page.Modify(can, can._target, {style: {display: "none"}})
},
})
Volcanos("ondetail", {help: "交互菜单", list: ["共享", "更名", "删除"],
"共享": function(event, can, value, sub) { var msg = sub.request(event)
},
})
Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg, list, cb, target) {
},
})

View File

@ -1,8 +1,7 @@
Volcanos("onimport", {help: "导入数据", list: [],
_init: function(can, meta, list, cb, target) { },
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb, target) {
},
})
Volcanos("onaction", {help: "交互操作", list: [],
_init: function(can, msg, list, cb, target) {
Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, list, cb, target) {
can.onexport._init(can, msg, list, cb, target)
},
})
@ -15,29 +14,25 @@ Volcanos("ondetail", {help: "交互菜单", list: ["共享", "更名", "删除"]
can.onappend.share(can, msg)
},
})
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"));
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"]);
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});
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"]);
msg.Option(key, can.Conf(key, value.key)), can.run(event, ["search", "Action.onaction._init"])
}, function(event, item) {
// 右键点击
can.onappend.carte(can, can.ondetail, can.ondetail.list, function(event, item, meta) {
meta[item] && meta[item](event, can, value)
})
});
can.onappend.menu(can, msg, value)
})
if (index == 0 || [value.key, value.name].indexOf(can.user.Search(can, key)) > -1) {
select = view
}
}); select && select.click(); })
if (index == 0 || [value.key, value.name].indexOf(can.user.Search(can, key)) > -1) { select = view }
}); select && select.click() })
},
key: function(can, msg) { msg.Option("storm", can.Conf("storm")) },
})

View File

@ -19,7 +19,8 @@ var Volcanos = shy("火山架", {cache: {}, index: 1, order: 1, debug: {
if (typeof name == "object") { var Config = name;
meta.volcano = Config.volcano, meta.libs = Config.libs;
var Preload = Config.libs; Config.panes.forEach(function(pane) {
Preload = Preload.concat(pane.list);
pane.list = pane.list || ["/pane/"+pane.name+".css", "/pane/"+pane.name+".js"]
Preload = Preload.concat(pane.list)
}); Preload = Preload.concat(Config.plugin)
name = Config.name, can = { _target: document.body, _follow: Config.name,