Added AND and OR operatiors to device filter.
This commit is contained in:
parent
ff037de386
commit
52d092c857
File diff suppressed because it is too large
Load Diff
|
@ -3535,7 +3535,7 @@
|
|||
function onRealNameCheckBox() {
|
||||
showRealNames = Q('RealNameCheckBox').checked;
|
||||
putstore('showRealNames', showRealNames ? 1 : 0);
|
||||
mainUpdate(6);
|
||||
mainUpdate(7);
|
||||
}
|
||||
|
||||
function onOnlineCheckBox(e) {
|
||||
|
@ -5354,24 +5354,36 @@
|
|||
function onUserSearchFocus(x) { userSearchFocus = x; }
|
||||
function onConsoleFocus(x) { consoleFocus = x; }
|
||||
|
||||
function onSearchInputChanged() {
|
||||
var x = Q('SearchInput').value.toLowerCase().trim(); putstore('_search', Q('SearchInput').value);
|
||||
QS('SearchInput')['background-color'] = QS('KvmSearchInput')['background-color'] = (x == '')?null:'#FDFFBE';
|
||||
QV('SearchInputClearButton', (x != '') && (navigator.userAgent.indexOf('Firefox') >= 0));
|
||||
QV('KvmSearchInputClearButton', (x != '') && (navigator.userAgent.indexOf('Firefox') >= 0));
|
||||
function parseSearchAndInput(x) {
|
||||
var s = x.split(' ' + "and" + ' '), r = null;
|
||||
for (var i in s) {
|
||||
var r2 = getDevicesThatMatchFilter(s[i]);
|
||||
if (r == null) { r = r2; } else { var r3 = []; for (var j in r2) { if (r.indexOf(r2[j]) >= 0) { r3.push(r2[j]); } } r = r3; }
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
function parseSearchOrInput(x) {
|
||||
var s = x.split(' ' + "or" + ' '), r = null;
|
||||
for (var i in s) { var r2 = parseSearchAndInput(s[i]); if (r == null) { r = r2; } else { for (var j in r2) { if (r.indexOf(r2[j] >= 0)) { r.push(r2[j]); } } } }
|
||||
return r;
|
||||
}
|
||||
|
||||
function getDevicesThatMatchFilter(x) {
|
||||
var r = [];
|
||||
var userSearch = null, ipSearch = null, groupSearch = null, tagSearch = null, agentTagSearch = null, wscSearch = null, osSearch = null, amtSearch = null, descSearch = null;
|
||||
if (x.startsWith("user:".toLowerCase())) { userSearch = x.substring("user:".length); }
|
||||
else if (x.startsWith("u:".toLowerCase())) { userSearch = x.substring("u:".length); }
|
||||
else if (x.startsWith("ip:".toLowerCase())) { ipSearch = x.substring("ip:".length); }
|
||||
else if (x.startsWith("group:".toLowerCase())) { groupSearch = x.substring("group:".length); }
|
||||
else if (x.startsWith("g:".toLowerCase())) { groupSearch = x.substring("g:".length); }
|
||||
else if (x.startsWith("tag:".toLowerCase())) { tagSearch = Q('SearchInput').value.trim().substring("tag:".length); }
|
||||
else if (x.startsWith("t:".toLowerCase())) { tagSearch = Q('SearchInput').value.trim().substring("t:".length); }
|
||||
else if (x.startsWith("atag:".toLowerCase())) { agentTagSearch = Q('SearchInput').value.trim().substring("atag:".length).toLowerCase(); }
|
||||
else if (x.startsWith("a:".toLowerCase())) { agentTagSearch = Q('SearchInput').value.trim().substring("a:".length).toLowerCase(); }
|
||||
else if (x.startsWith("os:".toLowerCase())) { osSearch = Q('SearchInput').value.trim().substring("os:".length).toLowerCase(); }
|
||||
else if (x.startsWith("amt:".toLowerCase())) { amtSearch = Q('SearchInput').value.trim().substring("amt:".length).toLowerCase(); }
|
||||
else if (x.startsWith("desc:".toLowerCase())) { descSearch = Q('SearchInput').value.trim().substring("desc:".length).toLowerCase(); }
|
||||
else if (x.startsWith("tag:".toLowerCase())) { tagSearch = x.substring("tag:".length); }
|
||||
else if (x.startsWith("t:".toLowerCase())) { tagSearch = x.substring("t:".length); }
|
||||
else if (x.startsWith("atag:".toLowerCase())) { agentTagSearch = x.substring("atag:".length); }
|
||||
else if (x.startsWith("a:".toLowerCase())) { agentTagSearch = x.substring("a:".length); }
|
||||
else if (x.startsWith("os:".toLowerCase())) { osSearch = x.substring("os:".length); }
|
||||
else if (x.startsWith("amt:".toLowerCase())) { amtSearch = x.substring("amt:".length); }
|
||||
else if (x.startsWith("desc:".toLowerCase())) { descSearch = x.substring("desc:".length); }
|
||||
else if (x == 'wsc:ok') { wscSearch = 1; }
|
||||
else if (x == 'wsc:noav') { wscSearch = 2; }
|
||||
else if (x == 'wsc:noupdate') { wscSearch = 3; }
|
||||
|
@ -5380,72 +5392,76 @@
|
|||
|
||||
if (x == '') {
|
||||
// No search
|
||||
for (var d in nodes) { nodes[d].v = true; }
|
||||
for (var d in nodes) { r.push(d); }
|
||||
} else if (ipSearch != null) {
|
||||
// IP address search
|
||||
for (var d in nodes) { nodes[d].v = ((nodes[d].ip != null) && (nodes[d].ip.indexOf(ipSearch) >= 0)); }
|
||||
for (var d in nodes) { if ((nodes[d].ip != null) && (nodes[d].ip.indexOf(ipSearch) >= 0)) { r.push(d); } }
|
||||
} else if (groupSearch != null) {
|
||||
// Group filter
|
||||
for (var d in nodes) { nodes[d].v = (meshes[nodes[d].meshid].name.toLowerCase().indexOf(groupSearch) >= 0); }
|
||||
for (var d in nodes) { if (meshes[nodes[d].meshid].name.toLowerCase().indexOf(groupSearch) >= 0) { r.push(d); } }
|
||||
} else if (tagSearch != null) {
|
||||
// Tag filter
|
||||
for (var d in nodes) {
|
||||
nodes[d].v = ((nodes[d].tags == null) && (tagSearch == '')) || ((nodes[d].tags != null) && (nodes[d].tags.indexOf(tagSearch) >= 0));
|
||||
if (((nodes[d].tags == null) && (tagSearch == '')) || ((nodes[d].tags != null) && (nodes[d].tags.indexOf(tagSearch) >= 0))) { r.push(d); }
|
||||
}
|
||||
} else if (agentTagSearch != null) {
|
||||
// Agent Tag filter
|
||||
for (var d in nodes) {
|
||||
nodes[d].v = (((nodes[d].agent != null) && (nodes[d].agent.tag == null)) && (agentTagSearch == '')) || ((nodes[d].agent != null) && (nodes[d].agent.tag != null) && (nodes[d].agent.tag.toLowerCase().indexOf(agentTagSearch) >= 0));
|
||||
if ((((nodes[d].agent != null) && (nodes[d].agent.tag == null)) && (agentTagSearch == '')) || ((nodes[d].agent != null) && (nodes[d].agent.tag != null) && (nodes[d].agent.tag.toLowerCase().indexOf(agentTagSearch) >= 0))) { r.push(d); };
|
||||
}
|
||||
} else if (userSearch != null) {
|
||||
// User search
|
||||
for (var d in nodes) {
|
||||
nodes[d].v = false;
|
||||
if (nodes[d].users && nodes[d].users.length > 0) { for (var i in nodes[d].users) { if (nodes[d].users[i].toLowerCase().indexOf(userSearch) >= 0) { nodes[d].v = true; } } }
|
||||
if (nodes[d].users && nodes[d].users.length > 0) { for (var i in nodes[d].users) { if (nodes[d].users[i].toLowerCase().indexOf(userSearch) >= 0) { r.push(d); } } }
|
||||
}
|
||||
} else if (osSearch != null) {
|
||||
// OS search
|
||||
for (var d in nodes) { nodes[d].v = ((nodes[d].osdesc != null) && (nodes[d].osdesc.toLowerCase().indexOf(osSearch) >= 0)); }
|
||||
for (var d in nodes) { if ((nodes[d].osdesc != null) && (nodes[d].osdesc.toLowerCase().indexOf(osSearch) >= 0)) { r.push(d); }; }
|
||||
} else if (amtSearch != null) {
|
||||
// Intel AMT search
|
||||
for (var d in nodes) { nodes[d].v = (nodes[d].intelamt != null) && ((amtSearch == '') || (nodes[d].intelamt.state == amtSearch)); }
|
||||
for (var d in nodes) { if ((nodes[d].intelamt != null) && ((amtSearch == '') || (nodes[d].intelamt.state == amtSearch))) { r.push(d); } }
|
||||
} else if (descSearch != null) {
|
||||
// Device description search
|
||||
for (var d in nodes) { nodes[d].v = (nodes[d].desc != null) && (nodes[d].desc != '') && ((descSearch == '') || (nodes[d].desc.toLowerCase().indexOf(descSearch) >= 0)); }
|
||||
for (var d in nodes) { if ((nodes[d].desc != null) && (nodes[d].desc != '') && ((descSearch == '') || (nodes[d].desc.toLowerCase().indexOf(descSearch) >= 0))) { r.push(d); } }
|
||||
} else if (wscSearch != null) {
|
||||
// Windows Security Center
|
||||
for (var d in nodes) {
|
||||
nodes[d].v = false;
|
||||
if (nodes[d].wsc) {
|
||||
if ((wscSearch == 1) && (nodes[d].wsc.antiVirus == 'OK') && (nodes[d].wsc.autoUpdate == 'OK') && (nodes[d].wsc.firewall == 'OK')) { nodes[d].v = true; }
|
||||
else if (((wscSearch == 2) || (wscSearch == 5)) && (nodes[d].wsc.antiVirus != 'OK')) { nodes[d].v = true; }
|
||||
else if (((wscSearch == 3) || (wscSearch == 5)) && (nodes[d].wsc.autoUpdate != 'OK')) { nodes[d].v = true; }
|
||||
else if (((wscSearch == 4) || (wscSearch == 5)) && (nodes[d].wsc.firewall != 'OK')) { nodes[d].v = true; }
|
||||
if ((wscSearch == 1) && (nodes[d].wsc.antiVirus == 'OK') && (nodes[d].wsc.autoUpdate == 'OK') && (nodes[d].wsc.firewall == 'OK')) { r.push(d); }
|
||||
else if (((wscSearch == 2) || (wscSearch == 5)) && (nodes[d].wsc.antiVirus != 'OK')) { r.push(d); }
|
||||
else if (((wscSearch == 3) || (wscSearch == 5)) && (nodes[d].wsc.autoUpdate != 'OK')) { r.push(d); }
|
||||
else if (((wscSearch == 4) || (wscSearch == 5)) && (nodes[d].wsc.firewall != 'OK')) { r.push(d); }
|
||||
}
|
||||
}
|
||||
} else if (x == '*') {
|
||||
// Star filter
|
||||
for (var d in nodes) { nodes[d].v = (stars[nodes[d]._id] == 1); }
|
||||
for (var d in nodes) { if (stars[nodes[d]._id] == 1) { r.push(d); } }
|
||||
} else {
|
||||
// Device name search
|
||||
try {
|
||||
var rs = x.split(/\s+/).join('|'), rx = new RegExp(rs); // In some cases (like +), this can throw an exception.
|
||||
for (var d in nodes) {
|
||||
nodes[d].v = (rx.test(nodes[d].name.toLowerCase())) || (nodes[d].rnamel != null && rx.test(nodes[d].rnamel.toLowerCase()));
|
||||
if ((nodes[d].v == false) && nodes[d].tags) {
|
||||
for (var s in nodes[d].tags) {
|
||||
if (rx.test(nodes[d].tags[s].toLowerCase())) {
|
||||
nodes[d].v = true;
|
||||
break;
|
||||
} else {
|
||||
nodes[d].v = false;
|
||||
}
|
||||
}
|
||||
if (showRealNames) {
|
||||
if (nodes[d].rnamel != null && rx.test(nodes[d].rnamel.toLowerCase())) { r.push(d); }
|
||||
} else {
|
||||
if (rx.test(nodes[d].name.toLowerCase())) { r.push(d); }
|
||||
}
|
||||
}
|
||||
} catch (ex) { for (var d in nodes) { nodes[d].v = true; } }
|
||||
} catch (ex) { for (var d in nodes) { r.push(d); } }
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
function onSearchInputChanged() {
|
||||
var x = Q('SearchInput').value.toLowerCase().trim(); putstore('_search', Q('SearchInput').value);
|
||||
QS('SearchInput')['background-color'] = QS('KvmSearchInput')['background-color'] = (x == '')?null:'#FDFFBE';
|
||||
QV('SearchInputClearButton', (x != '') && (navigator.userAgent.indexOf('Firefox') >= 0));
|
||||
QV('KvmSearchInputClearButton', (x != '') && (navigator.userAgent.indexOf('Firefox') >= 0));
|
||||
|
||||
var r = parseSearchOrInput(x);
|
||||
for (var d in nodes) { nodes[d].v = (r.indexOf(d) >= 0) }
|
||||
|
||||
// Check filter dropdown
|
||||
var devFilter = Q('DevFilterSelect').value;
|
||||
if (devFilter == 1) { for (var d in nodes) { if ((nodes[d].conn == null) || (nodes[d].conn == 0)) { nodes[d].v = false; } } } // Online
|
||||
|
|
Loading…
Reference in New Issue