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
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 11 deletions

5
package-lock.json generated
View file

@ -6009,6 +6009,11 @@
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
},
"normalize-strings": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/normalize-strings/-/normalize-strings-1.1.1.tgz",
"integrity": "sha512-fARPRdTwmrQDLYhmeh7j/eZwrCP6WzxD6uKOdK/hT/uKACAE9AG2Bc2dgqOZLkfmmctHpfcJ9w3AQnfLgg3GYg=="
},
"normalize-url": {
"version": "4.5.1",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",

View file

@ -60,6 +60,7 @@
"mime-types": "2.1.34",
"multer": "1.4.3",
"node-abi": "3.5.0",
"normalize-strings": "^1.1.1",
"open": "8.4.0",
"portscanner": "2.2.0",
"rand-token": "1.0.1",

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
};