Fix: Highlighting searched term should ignore accents (#2364)

* fixed accent highlighting not working

* fixed

* fixes

* improvements
This commit is contained in:
Myzel394
2021-11-21 15:27:50 +00:00
committed by GitHub
parent 886fdf7cd6
commit b23ead8097
4 changed files with 27 additions and 11 deletions

View File

@@ -1,5 +1,6 @@
"use strict";
const normalizeString = require("normalize-strings");
const lex = require('./lex');
const handleParens = require('./handle_parens');
const parse = require('./parse');
@@ -83,12 +84,8 @@ function findResultsWithExpression(expression, searchContext) {
throw new Error(`Can't find note path for note ${JSON.stringify(note.getPojo())}`);
}
if (notePathArray.includes("hidden")) {
return null;
}
return new SearchResult(notePathArray);
}).filter(Boolean);
});
for (const res of searchResults) {
res.computeScore(searchContext.highlightedTokens);
@@ -222,11 +219,19 @@ function highlightSearchResults(searchResults, highlightedTokens) {
}
for (const token of highlightedTokens) {
// this approach won't work for strings with diacritics
const tokenRegex = new RegExp("(" + utils.escapeRegExp(token) + ")", "gi");
for (const result of searchResults) {
result.highlightedNotePathTitle = result.highlightedNotePathTitle.replace(tokenRegex, "{$1}");
// Reset token
const tokenRegex = new RegExp(utils.escapeRegExp(token), "gi");
let match;
// Find all matches
while ((match = tokenRegex.exec(normalizeString(result.highlightedNotePathTitle))) !== null) {
console.log(match)
result.highlightedNotePathTitle = utils.wrapText(result.highlightedNotePathTitle, match.index, token.length, "{", "}");
// 2 characters are added, so we need to adjust the index
tokenRegex.lastIndex += 2;
}
}
}

View File

@@ -264,7 +264,7 @@ function timeLimit(promise, limitMs, errorMessage) {
res(result);
})
.catch(error => rej(error));
.catch(error => rej(error));
setTimeout(() => {
if (!resolved) {
@@ -302,6 +302,10 @@ function filterAttributeName(name) {
return name.replace(/[^\p{L}\p{N}_:]/ug, "");
}
function wrapText(text, start, length, prefix, suffix) {
return text.substring(0, start) + prefix + text.substr(start, length) + suffix + text.substring(start + length);
}
module.exports = {
randomSecureToken,
randomString,
@@ -336,5 +340,6 @@ module.exports = {
deferred,
removeDiacritic,
normalize,
filterAttributeName
filterAttributeName,
wrapText
};