mirror of
https://github.com/dbgate/dbgate
synced 2024-11-07 20:26:23 +00:00
camel case search
This commit is contained in:
parent
1a2acd764d
commit
a9257cf4f8
@ -38,25 +38,45 @@ export interface FilterNameDefinition {
|
|||||||
// return DoMatch(Filter, value) || camelMatch;
|
// return DoMatch(Filter, value) || camelMatch;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
function fuzzysearch(needle, haystack) {
|
// function fuzzysearch(needle, haystack) {
|
||||||
var hlen = haystack.length;
|
// var hlen = haystack.length;
|
||||||
var nlen = needle.length;
|
// var nlen = needle.length;
|
||||||
if (nlen > hlen) {
|
// if (nlen > hlen) {
|
||||||
return false;
|
// return false;
|
||||||
|
// }
|
||||||
|
// if (nlen === hlen) {
|
||||||
|
// return needle === haystack;
|
||||||
|
// }
|
||||||
|
// outer: for (var i = 0, j = 0; i < nlen; i++) {
|
||||||
|
// var nch = needle.charCodeAt(i);
|
||||||
|
// while (j < hlen) {
|
||||||
|
// if (haystack.charCodeAt(j++) === nch) {
|
||||||
|
// continue outer;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
|
||||||
|
function camelMatch(filter: string, text: string): boolean {
|
||||||
|
if (!text) return false;
|
||||||
|
if (!filter) return true;
|
||||||
|
|
||||||
|
if (filter.replace(/[A-Z]/g, '').length == 0) {
|
||||||
|
const camelVariants = [text.replace(/[^A-Z]/g, '')];
|
||||||
|
let s = text,
|
||||||
|
s0;
|
||||||
|
do {
|
||||||
|
s0 = s;
|
||||||
|
s = s.replace(/([A-Z])([A-Z])([A-Z])/, '$1$3');
|
||||||
|
} while (s0 != s);
|
||||||
|
camelVariants.push(s.replace(/[^A-Z]/g, ''));
|
||||||
|
const camelContains = !!camelVariants.find(x => x.includes(filter.toUpperCase()));
|
||||||
|
return camelContains;
|
||||||
|
} else {
|
||||||
|
return text.toUpperCase().includes(filter.toUpperCase());
|
||||||
}
|
}
|
||||||
if (nlen === hlen) {
|
|
||||||
return needle === haystack;
|
|
||||||
}
|
|
||||||
outer: for (var i = 0, j = 0; i < nlen; i++) {
|
|
||||||
var nch = needle.charCodeAt(i);
|
|
||||||
while (j < hlen) {
|
|
||||||
if (haystack.charCodeAt(j++) === nch) {
|
|
||||||
continue outer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function filterName(filter: string, ...names: (string | FilterNameDefinition)[]) {
|
export function filterName(filter: string, ...names: (string | FilterNameDefinition)[]) {
|
||||||
@ -73,13 +93,13 @@ export function filterName(filter: string, ...names: (string | FilterNameDefinit
|
|||||||
const namesChild: string[] = namesCompacted.filter(x => x.childName).map(x => x.childName);
|
const namesChild: string[] = namesCompacted.filter(x => x.childName).map(x => x.childName);
|
||||||
|
|
||||||
for (const token of tokens) {
|
for (const token of tokens) {
|
||||||
const tokenUpper = token.toUpperCase();
|
// const tokenUpper = token.toUpperCase();
|
||||||
if (tokenUpper.startsWith('#')) {
|
if (token.startsWith('#')) {
|
||||||
const tokenUpperSub = tokenUpper.substring(1);
|
// const tokenUpperSub = tokenUpper.substring(1);
|
||||||
const found = namesChild.find(name => fuzzysearch(tokenUpperSub, name.toUpperCase()));
|
const found = namesChild.find(name => camelMatch(token.substring(1), name));
|
||||||
if (!found) return false;
|
if (!found) return false;
|
||||||
} else {
|
} else {
|
||||||
const found = namesOwn.find(name => fuzzysearch(tokenUpper, name.toUpperCase()));
|
const found = namesOwn.find(name => camelMatch(token, name));
|
||||||
if (!found) return false;
|
if (!found) return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user