mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 16:58:06 +08:00
opt search
This commit is contained in:
parent
4a15bcf2bd
commit
b187b14dd9
30
lib/page.js
30
lib/page.js
@ -223,35 +223,43 @@ Volcanos("page", {help: "网页模块",
|
||||
return tr.style.display == "none" || can.page.ClassList.has(can, tr, "hide")? null: tr
|
||||
}).slice(1)
|
||||
|
||||
index = typeof index == "object"? index: [index]
|
||||
|
||||
var is_time = true, is_number = true
|
||||
can.core.List(list, function(tr) {
|
||||
var text = tr.childNodes[index].innerText
|
||||
var text = tr.childNodes[index[0]].innerText
|
||||
is_time = is_time && Date.parse(text) > 0
|
||||
is_number = is_number && !isNaN(parseInt(text))
|
||||
})
|
||||
|
||||
var num_list = can.core.List(list, function(tr) {
|
||||
var text = tr.childNodes[index].innerText
|
||||
var text = tr.childNodes[index[0]].innerText
|
||||
return is_time? Date.parse(text):
|
||||
is_number? can.base.parseSize(text): text
|
||||
})
|
||||
function isless(a, b, index) {
|
||||
if (a.childNodes[index[0]] && b.childNodes[index[0]]) {
|
||||
if (a.childNodes[index[0]].innerText < b.childNodes[index[0]].innerText) { return true }
|
||||
if (a.childNodes[index[0]].innerText > b.childNodes[index[0]].innerText) { return false }
|
||||
}
|
||||
return index.length > 1 && isless(a, b, index.slice(1))
|
||||
}
|
||||
|
||||
// 选择排序
|
||||
for (var i = 0; i < num_list.length; i++) {
|
||||
var min = i
|
||||
for (var i = 0; i < num_list.length; i++) { var min = i
|
||||
for (var j = i+1; j < num_list.length; j++) {
|
||||
if (sort_asc? num_list[min] <= num_list[j]: num_list[min] >= num_list[j]) {
|
||||
if (num_list[min] == num_list[j] && index.length > 1 && list[index[1]]) {
|
||||
if (sort_asc? isless(list[min], list[j], index.slice(1)): isless(list[j], list[min], index.slice(1))) {
|
||||
min = j
|
||||
}
|
||||
} else if (sort_asc? num_list[min] < num_list[j]: num_list[j] < num_list[min]) {
|
||||
min = j
|
||||
}
|
||||
}
|
||||
|
||||
if (min != i) {
|
||||
var temp = num_list[i]
|
||||
num_list[i] = num_list[min]
|
||||
num_list[min] = temp
|
||||
var temp = list[i]
|
||||
list[i] = list[min]
|
||||
list[min] = temp
|
||||
var temp = num_list[i]; num_list[i] = num_list[min]; num_list[min] = temp
|
||||
var temp = list[i]; list[i] = list[min]; list[min] = temp
|
||||
}
|
||||
|
||||
var tbody = list[i].parentElement
|
||||
|
@ -26,6 +26,7 @@ Volcanos("user", {help: "用户模块", agent: {
|
||||
reload: function(force) { (force || confirm("重新加载页面?")) && location.reload() },
|
||||
title: function(text) { return text && (document.title = text), document.title },
|
||||
jumps: function(url) { location.href = url },
|
||||
open: function(url) { window.open(url) },
|
||||
|
||||
scan: function(str) {
|
||||
try { var value = JSON.parse(str) } catch(e) { try {
|
||||
@ -80,7 +81,7 @@ Volcanos("user", {help: "用户模块", agent: {
|
||||
},
|
||||
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 src = can.user.MergeURL(can, {_path: "/share/"+msg.Result()}, true)
|
||||
var ui = can.user.toast(can, {
|
||||
title: can.page.Format("a", "/share?share="+msg.Result(), "share"),
|
||||
text: can.page.Format("img", src+"/share"), width: 300, height: 300, duration: 100000,
|
||||
@ -255,7 +256,7 @@ Volcanos("user", {help: "用户模块", agent: {
|
||||
}
|
||||
},
|
||||
|
||||
Share: shy("共享链接", function(can, objs, clear) {var obj = objs || {}; var path = location.pathname;
|
||||
MergeURL: shy("地址链接", function(can, objs, clear) { var obj = objs || {}; var path = location.pathname;
|
||||
obj._path && (path = obj._path, delete(obj._path))
|
||||
!clear && can.core.Item(can.user.Search(), function(key, value) {obj[key] || (obj[key] = value)});
|
||||
return can.core.List([location.origin+path, can.core.Item(obj, function(key, value) {
|
||||
@ -287,9 +288,6 @@ Volcanos("user", {help: "用户模块", agent: {
|
||||
return key+"="+encodeURIComponent(value)
|
||||
}).join("&")
|
||||
}),
|
||||
Searchs: shy("请求参数", function(can, key, def) {
|
||||
return can.user.Search(can, "active") == can._name? can.user.Search(can, key): def
|
||||
}),
|
||||
Cookie: shy("会话变量", function(can, key, value, path) {
|
||||
function set(k, v) {document.cookie = k+"="+v+";path="+(path||"/")}
|
||||
|
||||
|
@ -93,7 +93,7 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
|
||||
})
|
||||
|
||||
can.onengine.listen(can, "search", function(msg, word) {
|
||||
if (word[0] != "*" && word[0] != "fieldset") { return }
|
||||
if (word[0] != "*" && word[0] != "plugin") { return }
|
||||
|
||||
var fields = (msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",")
|
||||
can.page.Select(can, can._output, "fieldset.plugin>legend", function(item) {
|
||||
@ -103,7 +103,7 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
|
||||
switch (key) {
|
||||
case "ctx": msg.Push(key, "web.chat"); break
|
||||
case "cmd": msg.Push(key, "action"); break
|
||||
case "type": msg.Push(key, "fieldset"); break
|
||||
case "type": msg.Push(key, "plugin"); break
|
||||
case "name": msg.Push(key, item.innerHTML); break
|
||||
case "text":
|
||||
msg.Push(key, shy("跳转", function() {
|
||||
|
@ -131,6 +131,7 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
|
||||
can.onimport._init(can, msg, list, function(msg) {
|
||||
typeof cb == "function" && cb(msg)
|
||||
can.run({}, ["search", "River.onaction._init"])
|
||||
can.run({}, ["search", "Search.onaction._init"])
|
||||
can.run({}, ["search", "Action.onaction._init"])
|
||||
can.run({}, ["search", "Footer.onaction._init"])
|
||||
}, can._output)
|
||||
@ -144,7 +145,7 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
|
||||
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.Share(can, args, true))
|
||||
can.user.jumps(can.user.MergeURL(can, args, true))
|
||||
},
|
||||
username: function(event, can) {
|
||||
var ui = can.user.carte(event, can, can.onaction, ["logout"])
|
||||
|
@ -4,7 +4,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
can._main_storm = can.user.Search(can, STORM) || (can.user.isMobile? "office": can.user.isExtension? "chrome": "studio")
|
||||
|
||||
can.run({}, ["search", "Header.onimport.menu",
|
||||
["添加", "创建群组", "添加用户", "添加设备", "添加应用", "添加工具"],
|
||||
["添加", "创建群组", "添加用户", "添加应用", "添加工具", "添加设备"],
|
||||
["访问", "访问用户", "访问应用", "访问工具", "访问设备", "访问研发"],
|
||||
["共享", "共享群组", "共享应用", "共享工具"],
|
||||
], function(event, item) {
|
||||
var cb = can.ondetail[item]; typeof cb == "function" && cb(event, can, item, can.Conf(RIVER), can.Conf(STORM))
|
||||
@ -43,6 +44,32 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg,
|
||||
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") { 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() {
|
||||
can.onaction.action(msg._event, can, river, storm)
|
||||
})); break
|
||||
default: msg.Push(key, "")
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
},
|
||||
storm: function(event, can, river) {
|
||||
var list = can.sublist[river]; if (list) { return can.page.Toggle(can, list) }
|
||||
@ -185,6 +212,22 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户
|
||||
can.user.Search(can, {river: river})
|
||||
})
|
||||
},
|
||||
|
||||
"访问用户": function(event, can, button, river, storm) {
|
||||
can.user.select(event, can, "user", "time,type,name,text")
|
||||
},
|
||||
"访问应用": function(event, can, button, river, storm) {
|
||||
can.user.select(event, can, "storm", "type,name,text")
|
||||
},
|
||||
"访问工具": function(event, can, button, river, storm) {
|
||||
can.user.select(event, can, "plugin", "type,name,text")
|
||||
},
|
||||
"访问设备": function(event, can, button, river, storm) {
|
||||
can.user.select(event, can, "space", "time,type,name,text")
|
||||
},
|
||||
"访问研发": function(event, can, button, river, storm) {
|
||||
can.user.select(event, can, "github", "time,type,name,text")
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: []})
|
||||
})()
|
||||
|
@ -1,19 +1,24 @@
|
||||
fieldset.Search {
|
||||
position:fixed; top:32px; left:160px;
|
||||
background:#041a258a;
|
||||
padding:10px;
|
||||
display:none;
|
||||
position:fixed;
|
||||
top:32px; left:160px;
|
||||
background:black;
|
||||
z-index:10;
|
||||
}
|
||||
fieldset.Search input.word{
|
||||
width:320px;
|
||||
fieldset.Search input.word {
|
||||
width:-webkit-fill-available;
|
||||
}
|
||||
fieldset.Search div.output div.content {
|
||||
max-height:400px;
|
||||
overflow:auto;
|
||||
}
|
||||
fieldset.Search div.output div.content a {
|
||||
color:yellow;
|
||||
}
|
||||
fieldset.Search div.output div.content table {
|
||||
min-width:400px;
|
||||
}
|
||||
fieldset.Search div.output div.display {
|
||||
max-height:200px;
|
||||
overflow:auto;
|
||||
}
|
||||
|
||||
|
106
pane/Search.js
106
pane/Search.js
@ -1,15 +1,23 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||
can.ui = can.page.Append(can, can._output, [
|
||||
{input: ["word", function(event) { can.onkeypop.input(event, can)
|
||||
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 }
|
||||
can.input(event, event.target.value)
|
||||
}
|
||||
}]},
|
||||
{view: "content"}, {view: "display", list: [{type: "table"}]},
|
||||
])
|
||||
typeof cb == "function" && cb(msg)
|
||||
},
|
||||
_table: function(can, msg, fields, search) {
|
||||
can.onappend.table(can, msg, can.ui.content, "table", function(value, key, index, line) {
|
||||
_table: function(can, msg, fields) { can.onmotion.clear(can, can.ui.content)
|
||||
var table = can.onappend.table(can, msg, can.ui.content, "table", 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 (typeof line.text == "function") {
|
||||
can.onmotion.hide(can)
|
||||
line.text()
|
||||
return
|
||||
return can.onmotion.hide(can), line.text()
|
||||
}
|
||||
|
||||
can.page.Append(can, can.ui.table, [{td: can.core.List(fields, function(item) {
|
||||
@ -21,63 +29,61 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
can.Status("selected", can.page.Select(can, can.ui.table, "tr").length-1)
|
||||
}}
|
||||
})
|
||||
|
||||
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})
|
||||
can.onengine.trigger(can, msg, "search")
|
||||
|
||||
can.onmotion.clear(can, can.ui.content)
|
||||
can.run(msg._event, cmds, function(msg) { can.list = msg.Table()
|
||||
can.onimport._table(can, msg, fields)
|
||||
})
|
||||
can.ui.word.setSelectionRange(0, -1)
|
||||
},
|
||||
|
||||
select: function(can, msg, cmds, cb) { can.onmotion.clear(can)
|
||||
var fields = (msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",")
|
||||
|
||||
function search(word, cb) { cmds[1] = word
|
||||
if (word == "" && can.list && can.list[0] && typeof can.list[0].text == "function") {
|
||||
can.onmotion.hide(can)
|
||||
can.list[0].text()
|
||||
return
|
||||
}
|
||||
|
||||
var msg = can.request({}, {fields: fields.join(","), word: cmds})
|
||||
can.onengine.trigger(can, msg, "search")
|
||||
|
||||
can.onmotion.clear(can, can.ui.content)
|
||||
can.run(msg._event, cmds, function(msg) {
|
||||
can.list = msg.Table()
|
||||
can.onimport._table(can, msg, fields, search)
|
||||
typeof cb == "function" && cb(msg)
|
||||
})
|
||||
select: function(can, msg, cmds, cb) {
|
||||
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() {
|
||||
typeof cb == "function" && cb(can.onexport.select(can)), can.onmotion.hide(can)
|
||||
}
|
||||
|
||||
can.ui = can.page.Append(can, can._output, [
|
||||
{input: ["word", function(event) { var target = event.target
|
||||
can.onkeypop.input(event, can)
|
||||
if (event.key == "Escape") {
|
||||
can.onmotion.hide(can)
|
||||
}
|
||||
|
||||
if (event.key == "Enter") { search(event.target.value, function(msg) {
|
||||
var list = can.page.Select(can, can.ui.content, "tr"); if (list.length == 2) {
|
||||
list[1].firstChild.click(); event.target.setSelectionRange(0, -1)
|
||||
}
|
||||
}) }
|
||||
}]},
|
||||
{view: "content"}, {view: "display", list: [{type: "table", list: [{th: fields}]}]},
|
||||
])
|
||||
can.cb = function() {
|
||||
typeof cb == "function" && cb(can.page.Select(can, can.ui.display, "tr", function(tr) {
|
||||
return can.page.Select(can, tr, "td", function(td) { return td.innerHTML })
|
||||
}).slice(1)), can.onmotion.hide(can)
|
||||
can.input = function(event, word) { cmds[1] = word
|
||||
can.onimport._word(can, msg, cmds, fields)
|
||||
}
|
||||
|
||||
can.onmotion.show(can)
|
||||
can.ui.input.focus()
|
||||
search(cmds[1])
|
||||
can.onmotion.show(can), can.ui.input.focus()
|
||||
can.onimport._word(can, msg, cmds, fields)
|
||||
},
|
||||
})
|
||||
Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"], _init: function(can, msg, list, cb, target) {
|
||||
can.onimport._init(can, msg, list, cb, can._output)
|
||||
},
|
||||
"关闭": function(event, can) { can.onmotion.hide(can) },
|
||||
"清空": function(event, can) { can.onmotion.clear(can) },
|
||||
"清空": function(event, can) { can.onmotion.clear(can, can.ui.table) },
|
||||
"完成": function(event, can) { typeof can.cb == "function" && can.cb() },
|
||||
|
||||
hide: function(can, msg, cmd, cb) { can.onmotion.hide(can) },
|
||||
choice: 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()
|
||||
} else if (can.list[index].text.indexOf("http") == 0) {
|
||||
can.user.open(can.list[index].text)
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: ["selected", "count"],
|
||||
select: function(can) {
|
||||
can.page.Select(can, can.ui.display, "tr", function(tr) {
|
||||
return can.page.Select(can, tr, "td", function(td) { return td.innerHTML })
|
||||
}).slice(1)
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: ["selected", "count"]})
|
||||
|
||||
|
@ -88,7 +88,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
}, can.ui.display)
|
||||
|
||||
can.page.Appends(can, can.ui.profile, [{th: ["key", "value"]}])
|
||||
can.core.Item(task, function(key, value) { can.page.Append(can, can.ui.profile, [{td: [key, key == "pod"? ('<a href="'+can.user.Share(can, {pod: value})+'" target="_blank">'+value+'</a>'): value],
|
||||
can.core.Item(task, function(key, value) { can.page.Append(can, can.ui.profile, [{td: [key, key == "pod"? ('<a href="'+can.user.MergeURL(can, {pod: value})+'" target="_blank">'+value+'</a>'): value],
|
||||
onclick: function(event) { if (event.target.type == "button") { var name = event.target.name
|
||||
var cb = can.onaction[name]; if (typeof cb == "function") { return cb(event, can, name) }
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user