Include principal parts in searches by name
This commit is contained in:
parent
8cc3b469f9
commit
adb95fbae3
|
@ -63,15 +63,25 @@ export function getMatchingSearchWords() {
|
||||||
let details = filters.orthography ? parseReferences(word.details) : word.details;
|
let details = filters.orthography ? parseReferences(word.details) : word.details;
|
||||||
details = filters.ignoreDiacritics ? removeDiacritics(details) : details;
|
details = filters.ignoreDiacritics ? removeDiacritics(details) : details;
|
||||||
details = filters.caseSensitive ? details : details.toLowerCase();
|
details = filters.caseSensitive ? details : details.toLowerCase();
|
||||||
|
let principalParts = typeof word.principalParts === 'undefined' ? [] : word.principalParts;
|
||||||
|
principalParts = filters.orthography ? principalParts.map(part => translateOrthography(part)) : principalParts;
|
||||||
|
principalParts = filters.ignoreDiacritics ? principalParts.map(part => removeDiacritics(part)) : principalParts;
|
||||||
|
principalParts = filters.caseSensitive ? principalParts : principalParts.map(part => part.toLowerCase());
|
||||||
|
|
||||||
const isInName = filters.name && (filters.exact
|
const isInName = filters.name && (filters.exact
|
||||||
? searchTerm == name
|
? searchTerm == name
|
||||||
: new RegExp(searchTerm, 'g').test(name));
|
: new RegExp(searchTerm, 'g').test(name)
|
||||||
|
);
|
||||||
const isInDefinition = filters.definition && (filters.exact
|
const isInDefinition = filters.definition && (filters.exact
|
||||||
? searchTerm == definition
|
? searchTerm == definition
|
||||||
: new RegExp(searchTerm, 'g').test(definition));
|
: new RegExp(searchTerm, 'g').test(definition)
|
||||||
|
);
|
||||||
const isInDetails = filters.details && new RegExp(searchTerm, 'g').test(details);
|
const isInDetails = filters.details && new RegExp(searchTerm, 'g').test(details);
|
||||||
return searchTerm === '' || isInName || isInDefinition || isInDetails;
|
const isInPrincipalParts = filters.name && (filters.exact
|
||||||
|
? principalParts.includes(searchTerm)
|
||||||
|
: principalParts.some(part => new RegExp(searchTerm, 'g').test(part))
|
||||||
|
);
|
||||||
|
return searchTerm === '' || isInName || isInDefinition || isInDetails || isInPrincipalParts;
|
||||||
});
|
});
|
||||||
return matchingWords;
|
return matchingWords;
|
||||||
}
|
}
|
||||||
|
@ -99,6 +109,16 @@ export function highlightSearchTerm(word) {
|
||||||
+ '<mark>' + markedUpWord.name.substr(wordIndex, searchTermLength) + '</mark>'
|
+ '<mark>' + markedUpWord.name.substr(wordIndex, searchTermLength) + '</mark>'
|
||||||
+ markedUpWord.name.substr(wordIndex + searchTermLength);
|
+ markedUpWord.name.substr(wordIndex + searchTermLength);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (markedUpWord.principalParts !== null) {
|
||||||
|
const part = getIndicesOf(searchTerm, removeDiacritics(markedUpWord.principalParts), filters.caseSensitive);
|
||||||
|
part.forEach((wordIndex, i) => {
|
||||||
|
wordIndex += '<mark></mark>'.length * i;
|
||||||
|
markedUpWord.principalParts = markedUpWord.principalParts.substring(0, wordIndex)
|
||||||
|
+ '<mark>' + markedUpWord.principalParts.substr(wordIndex, searchTermLength) + '</mark>'
|
||||||
|
+ markedUpWord.principalParts.substr(wordIndex + searchTermLength);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (filters.definition) {
|
if (filters.definition) {
|
||||||
const definitionMatches = getIndicesOf(searchTerm, removeDiacritics(markedUpWord.definition), filters.caseSensitive);
|
const definitionMatches = getIndicesOf(searchTerm, removeDiacritics(markedUpWord.definition), filters.caseSensitive);
|
||||||
|
@ -122,6 +142,10 @@ export function highlightSearchTerm(word) {
|
||||||
const regexMethod = 'g' + (filters.caseSensitive ? '' : 'i');
|
const regexMethod = 'g' + (filters.caseSensitive ? '' : 'i');
|
||||||
if (filters.name) {
|
if (filters.name) {
|
||||||
markedUpWord.name = markedUpWord.name.replace(new RegExp(`(${searchTerm})`, regexMethod), `<mark>$1</mark>`);
|
markedUpWord.name = markedUpWord.name.replace(new RegExp(`(${searchTerm})`, regexMethod), `<mark>$1</mark>`);
|
||||||
|
|
||||||
|
if (markedUpWord.principalParts !== null) {
|
||||||
|
markedUpWord.principalParts = markedUpWord.principalParts.replace(new RegExp(`(${searchTerm})`, regexMethod), `<mark>$1</mark>`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (filters.definition) {
|
if (filters.definition) {
|
||||||
markedUpWord.definition = markedUpWord.definition.replace(new RegExp(`(${searchTerm})`, regexMethod), `<mark>$1</mark>`);
|
markedUpWord.definition = markedUpWord.definition.replace(new RegExp(`(${searchTerm})`, regexMethod), `<mark>$1</mark>`);
|
||||||
|
|
|
@ -60,15 +60,24 @@ export function getMatchingSearchWords() {
|
||||||
definition = filters.caseSensitive ? definition : definition.toLowerCase();
|
definition = filters.caseSensitive ? definition : definition.toLowerCase();
|
||||||
let details = filters.ignoreDiacritics ? removeDiacritics(word.details) : word.details;
|
let details = filters.ignoreDiacritics ? removeDiacritics(word.details) : word.details;
|
||||||
details = filters.caseSensitive ? details : details.toLowerCase();
|
details = filters.caseSensitive ? details : details.toLowerCase();
|
||||||
|
let principalParts = typeof word.principalParts === 'undefined' ? [] : word.principalParts;
|
||||||
|
principalParts = filters.ignoreDiacritics ? principalParts.map(part => removeDiacritics(part)) : principalParts;
|
||||||
|
principalParts = filters.caseSensitive ? principalParts : principalParts.map(part => part.toLowerCase());
|
||||||
|
|
||||||
const isInName = filters.name && (filters.exact
|
const isInName = filters.name && (filters.exact
|
||||||
? searchTerm == name
|
? searchTerm == name
|
||||||
: new RegExp(searchTerm, 'g').test(name));
|
: new RegExp(searchTerm, 'g').test(name)
|
||||||
|
);
|
||||||
const isInDefinition = filters.definition && (filters.exact
|
const isInDefinition = filters.definition && (filters.exact
|
||||||
? searchTerm == definition
|
? searchTerm == definition
|
||||||
: new RegExp(searchTerm, 'g').test(definition));
|
: new RegExp(searchTerm, 'g').test(definition)
|
||||||
|
);
|
||||||
const isInDetails = filters.details && new RegExp(searchTerm, 'g').test(details);
|
const isInDetails = filters.details && new RegExp(searchTerm, 'g').test(details);
|
||||||
return searchTerm === '' || isInName || isInDefinition || isInDetails;
|
const isInPrincipalParts = filters.name && (filters.exact
|
||||||
|
? principalParts.includes(searchTerm)
|
||||||
|
: principalParts.some(part => new RegExp(searchTerm, 'g').test(part))
|
||||||
|
);
|
||||||
|
return searchTerm === '' || isInName || isInDefinition || isInDetails || isInPrincipalParts;
|
||||||
});
|
});
|
||||||
return matchingWords;
|
return matchingWords;
|
||||||
}
|
}
|
||||||
|
@ -92,6 +101,16 @@ export function highlightSearchTerm(word) {
|
||||||
+ '<mark>' + markedUpWord.name.substr(wordIndex, searchTermLength) + '</mark>'
|
+ '<mark>' + markedUpWord.name.substr(wordIndex, searchTermLength) + '</mark>'
|
||||||
+ markedUpWord.name.substr(wordIndex + searchTermLength);
|
+ markedUpWord.name.substr(wordIndex + searchTermLength);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (markedUpWord.principalParts !== null) {
|
||||||
|
const part = getIndicesOf(searchTerm, removeDiacritics(markedUpWord.principalParts), filters.caseSensitive);
|
||||||
|
part.forEach((wordIndex, i) => {
|
||||||
|
wordIndex += '<mark></mark>'.length * i;
|
||||||
|
markedUpWord.principalParts = markedUpWord.principalParts.substring(0, wordIndex)
|
||||||
|
+ '<mark>' + markedUpWord.principalParts.substr(wordIndex, searchTermLength) + '</mark>'
|
||||||
|
+ markedUpWord.principalParts.substr(wordIndex + searchTermLength);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (filters.definition) {
|
if (filters.definition) {
|
||||||
const definitionMatches = getIndicesOf(searchTerm, removeDiacritics(markedUpWord.definition), filters.caseSensitive);
|
const definitionMatches = getIndicesOf(searchTerm, removeDiacritics(markedUpWord.definition), filters.caseSensitive);
|
||||||
|
@ -115,6 +134,10 @@ export function highlightSearchTerm(word) {
|
||||||
const regexMethod = 'g' + (filters.caseSensitive ? '' : 'i');
|
const regexMethod = 'g' + (filters.caseSensitive ? '' : 'i');
|
||||||
if (filters.name) {
|
if (filters.name) {
|
||||||
markedUpWord.name = markedUpWord.name.replace(new RegExp(`(${searchTerm})`, regexMethod), `<mark>$1</mark>`);
|
markedUpWord.name = markedUpWord.name.replace(new RegExp(`(${searchTerm})`, regexMethod), `<mark>$1</mark>`);
|
||||||
|
|
||||||
|
if (markedUpWord.principalParts !== null) {
|
||||||
|
markedUpWord.principalParts = markedUpWord.principalParts.replace(new RegExp(`(${searchTerm})`, regexMethod), `<mark>$1</mark>`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (filters.definition) {
|
if (filters.definition) {
|
||||||
markedUpWord.definition = markedUpWord.definition.replace(new RegExp(`(${searchTerm})`, regexMethod), `<mark>$1</mark>`);
|
markedUpWord.definition = markedUpWord.definition.replace(new RegExp(`(${searchTerm})`, regexMethod), `<mark>$1</mark>`);
|
||||||
|
|
Loading…
Reference in New Issue