1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58: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]] var action = storm && storm.action && storm.action[cmds[2]]
if (!storm) { break } if (cmds.length == 2) { if (!storm) { break } if (cmds.length == 2) {
if (storm.index) { 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 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")) { 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) }) 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"] || {} meta.detail = meta.feature["detail"] || {}
sub.onimport._init(sub, sub.Conf(meta), list, function() {}, field); 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: function(can, action, list) { // [string [class item...] {}]
action && (action.innerHTML = ""), can.onaction && can.core.List(list||can.onaction.list, function(item) { action && (action.innerHTML = ""), can.onaction && can.core.List(list||can.onaction.list, function(item) {
item === ""? can.page.Append(can, action, [{view: "item space"}]): 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) { 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 var cb = can.onaction[item] || can.onkeymap && can.onkeymap._remote
cb? cb(event, can, item): can.run(event, ["action", item], function(msg) {}, true) 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]] var cb = can.onaction[item[0]]
cb && cb(event, can, item[0], item[event.target.selectedIndex+1]) 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) { _detail: function(can, msg, list, target) {
@ -481,8 +484,8 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) { met
} }
return ui return ui
}, },
share: function(can, msg, name, text) { share: function(can, msg, cmd) {
can.run(msg._event, ["action", "share"], function(msg) { can.run(msg._event, cmd||["action", "share"], function(msg) {
var src = can.user.Share(can, {_path: "/share/"+msg.Result()}, true); 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"), 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) { 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", Volcanos({name: "demo", volcano: "/frame.js", iceberg: "/chat/", intshell: "plug.sh",
libs: ["/lib/base", "/lib/core", "/lib/misc", "/lib/page", "/lib/user"], panes: [ 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: [ {name: "Header", help: "标题栏", pos: "head", state: ["time", "username"]},
"time", "username", {name: "River", help: "群聊组", pos: "left"},
]}, {name: "Storm", help: "应用流", pos: "right"},
{type: "pane", name: "River", help: "群聊组", pos: "left", list: ["/pane/River.js", "/pane/River.css"]}, {name: "Action", help: "工作台", pos: "middle"},
{type: "pane", name: "Storm", help: "应用流", pos: "right", list: ["/pane/Storm.js", "/pane/Storm.css"]}, {name: "Search", help: "搜索框", pos: "float"},
{type: "pane", name: "Action", help: "工作台", pos: "middle", list: ["/pane/Action.js", "/pane/Action.css"]}, {name: "Footer", help: "状态条", pos: "foot", state: ["ncmd" ]},
{type: "pane", name: "Footer", help: "状态条", pos: "foot", list: ["/pane/Footer.js", "/pane/Footer.css"], state: [
"ncmd",
]},
], main: {name: "Header", engine: "remote", list: ["/publish/order.js"]}, plugin: [ ], main: {name: "Header", engine: "remote", list: ["/publish/order.js"]}, plugin: [
"/plugin/state.js", "/plugin/state.js",
"/plugin/table.js", "/plugin/table.js",

View File

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

View File

@ -1,8 +1,7 @@
Volcanos("onimport", {help: "导入数据", list: [], Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb, target) {
_init: function(can, meta, list, cb, target) { }, },
}) })
Volcanos("onaction", {help: "交互数据", list: [], Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) {
_init: function(can, msg, list, cb, target) {
can.onexport._init(can, msg, list, cb, target) can.onexport._init(can, msg, list, cb, target)
}, },
ncmd: function(can, msg, list, cb, target) { ncmd: function(can, msg, list, cb, target) {
@ -11,9 +10,8 @@ Volcanos("onaction", {help: "交互数据", list: [],
}) })
}, },
}) })
Volcanos("onexport", {help: "导出数据", list: [], Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg, list, cb, target) {
_init: function(can, msg, list, cb, target) { can.run({}, [], function(msg) { can._output.innerHTML = ""
can.run({}, [], function(msg) { can._output.innerHTML = "";
can.core.List(msg.result, function(title) { can.core.List(msg.result, function(title) {
can.page.Append(can, can._output, [{view: ["title", "div", 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; background-color:red;
border:ridge 2px yellow; 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 { fieldset.Header>div.output>div.state {
cursor:pointer; 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) { Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) {
function init() { function init() {
can.onexport._init(can, msg, list, function() { can.onexport._init(can, msg, list, function() {
can.user.title(can.user.Search(can, "pod")); can.user.title(can.user.Search(can, "pod"))
can.run(msg._event, ["search", "River.onaction._init"]); can.run(msg._event, ["search", "River.onaction._init"])
can.run(msg._event, ["search", "Footer.onaction._init"]); can.run(msg._event, ["search", "Footer.onaction._init"])
}, target) }, target)
} }
can.run({}, ["check"], function(msg) { can.run({}, ["check"], function(msg) { if (msg.Result()) { return init() }
if (msg.Result()) { return init() }
var ui = can.user.input({}, can, [ var ui = can.user.input({}, can, [
{username: "username", name: "用户"}, {username: "username", name: "用户"},
{password: "password", name: "密码"}, {password: "password", name: "密码"},
{button: [["登录", function(event) { {button: [["登录", function(event) {
var username = ui["用户"].value can.run({}, ["login", ui["用户"].value, ui["密码"].value], function(msg) {
var password = ui["密码"].value if (msg.Result()) { can.page.Remove(can, ui.first); return init() }
can.run({}, ["login", username, password], function(msg) {
if (msg.Result()) {
can.page.Remove(can, ui.first)
return init()
}
can.user.alert("用户或密码错误") can.user.alert("用户或密码错误")
}) })
}], "扫码"]}, }], ["扫码", function(event) {
// TODO
}]]},
], function(event, button, data, list) { ], 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) { 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.Conf("username", msg.Option("user.nick")||msg.Option("user.name"))
can.core.List(msg.result||["github.com/shylinux/contexts"], function(title) { 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") }, click: function(event) { can.onaction["title"](event, can, "title") },
}]) }])
}) })
can.core.List(can.Conf("state")||["time", "username"], function(item) { can.core.List(can.Conf("state")||["time", "username"], function(item) {
can.page.Append(can, can._output, [{view: ["state "+item, "div", can.Conf(item)], can.page.Append(can, can._output, [{view: ["state "+item, "div", can.Conf(item)],
click: function(event) { can.onaction[item](event, can, 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) 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() typeof cb == "function" && cb()
}) })
}, },

View File

@ -18,20 +18,18 @@ Volcanos("ondetail", {help: "菜单交互", list: ["添加用户", "重命名",
console.log(river, button) 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) { 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) { }, function(event) {
// 右键点击 // 右键点击
can.onappend.menu(can, msg, value) can.onappend.menu(can, msg, value)
}); })
if (index == 0 || [value.key, value.name].indexOf(can.user.Search(can, key)) > -1) { if (index == 0 || [value.key, value.name].indexOf(can.user.Search(can, key)) > -1) { select = view }
select = view }); select && select.click(), typeof cb == "function" && cb(sup) })
}
}); select && select.click(); typeof cb == "function" && cb(sup); })
}, },
key: function(can, msg) { msg.Option("river", can.Conf("river")) }, 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: [], Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb, target) {
_init: function(can, meta, list, cb, target) { }, },
}) })
Volcanos("onaction", {help: "交互操作", list: [], Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, list, cb, target) {
_init: function(can, msg, list, cb, target) {
can.onexport._init(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) can.onappend.share(can, msg)
}, },
}) })
Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg, list, cb, target) { var key = "storm"; Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg, list, cb, target) { var key = "storm"
can.Cache(can.Conf("river"), can._output, can.Conf(key)); can.Cache(can.Conf("river"), can._output, can.Conf(key))
var river = can.Conf("river", msg.Option("river")); var river = can.Conf("river", msg.Option("river"))
if (msg.Option(key, can.Conf(key, can.Cache(river, can._output)||""))) { 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) { 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("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) { }, function(event, item) {
// 右键点击 // 右键点击
can.onappend.carte(can, can.ondetail, can.ondetail.list, function(event, item, meta) { can.onappend.menu(can, msg, value)
meta[item] && meta[item](event, can, value) })
})
});
if (index == 0 || [value.key, value.name].indexOf(can.user.Search(can, key)) > -1) { if (index == 0 || [value.key, value.name].indexOf(can.user.Search(can, key)) > -1) { select = view }
select = view }); select && select.click() })
}
}); select && select.click(); })
}, },
key: function(can, msg) { msg.Option("storm", can.Conf("storm")) }, 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; if (typeof name == "object") { var Config = name;
meta.volcano = Config.volcano, meta.libs = Config.libs; meta.volcano = Config.volcano, meta.libs = Config.libs;
var Preload = Config.libs; Config.panes.forEach(function(pane) { 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) }); Preload = Preload.concat(Config.plugin)
name = Config.name, can = { _target: document.body, _follow: Config.name, name = Config.name, can = { _target: document.body, _follow: Config.name,