mirror of
https://codeberg.org/forgejo/forgejo
synced 2024-11-25 19:26:09 +01:00
ef6f5f0124
Very simple change, just rename this variable so it does not feature the name of the module.
44 lines
1.4 KiB
JavaScript
44 lines
1.4 KiB
JavaScript
import emojis from '../../../assets/emoji.json';
|
|
|
|
const maxMatches = 6;
|
|
|
|
function sortAndReduce(map) {
|
|
const sortedMap = new Map(Array.from(map.entries()).sort((a, b) => a[1] - b[1]));
|
|
return Array.from(sortedMap.keys()).slice(0, maxMatches);
|
|
}
|
|
|
|
export function matchEmoji(queryText) {
|
|
const query = queryText.toLowerCase().replaceAll('_', ' ');
|
|
if (!query) return emojis.slice(0, maxMatches).map((e) => e.aliases[0]);
|
|
|
|
// results is a map of weights, lower is better
|
|
const results = new Map();
|
|
for (const {aliases} of emojis) {
|
|
const mainAlias = aliases[0];
|
|
for (const [aliasIndex, alias] of aliases.entries()) {
|
|
const index = alias.replaceAll('_', ' ').indexOf(query);
|
|
if (index === -1) continue;
|
|
const existing = results.get(mainAlias);
|
|
const rankedIndex = index + aliasIndex;
|
|
results.set(mainAlias, existing ? existing - rankedIndex : rankedIndex);
|
|
}
|
|
}
|
|
|
|
return sortAndReduce(results);
|
|
}
|
|
|
|
export function matchMention(queryText) {
|
|
const query = queryText.toLowerCase();
|
|
|
|
// results is a map of weights, lower is better
|
|
const results = new Map();
|
|
for (const obj of window.config.mentionValues) {
|
|
const index = obj.key.toLowerCase().indexOf(query);
|
|
if (index === -1) continue;
|
|
const existing = results.get(obj);
|
|
results.set(obj, existing ? existing - index : index);
|
|
}
|
|
|
|
return sortAndReduce(results);
|
|
}
|