diff options
author | Thibaut Girka <thib@sitedethib.com> | 2018-10-27 18:29:22 +0200 |
---|---|---|
committer | ThibG <thib@sitedethib.com> | 2018-10-27 22:45:11 +0200 |
commit | ee1f1a2ec97604ed364a5944bd300be0771ba7d7 (patch) | |
tree | b09d38a0335cecba18e1621babb8eb3fc3fd0e66 /app/javascript/flavours | |
parent | 8f4fab65a1ebc8296cb398fb3ce4144dcf264f35 (diff) |
When searching for an emoji with multiple separators, consider the full input
e.g., typing “blob_cat_p” used to search for “blob” and “cat”, but not “blob_cat_p”, which means “blob_cat_patpat” is very unlikely to show up, although it is likely what the user wanted to type in the first place.
Diffstat (limited to 'app/javascript/flavours')
-rw-r--r-- | app/javascript/flavours/glitch/util/emoji/emoji_mart_search_light.js | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/app/javascript/flavours/glitch/util/emoji/emoji_mart_search_light.js b/app/javascript/flavours/glitch/util/emoji/emoji_mart_search_light.js index 36351ec02..164fdcc0b 100644 --- a/app/javascript/flavours/glitch/util/emoji/emoji_mart_search_light.js +++ b/app/javascript/flavours/glitch/util/emoji/emoji_mart_search_light.js @@ -2,7 +2,7 @@ // https://github.com/missive/emoji-mart/blob/5f2ffcc/src/utils/emoji-index.js import data from './emoji_mart_data_light'; -import { getData, getSanitizedData, intersect } from './emoji_utils'; +import { getData, getSanitizedData, uniq, intersect } from './emoji_utils'; let originalPool = {}; let index = {}; @@ -103,7 +103,7 @@ function search(value, { emojisToShowFilter, maxResults, include, exclude, custo } } - allResults = values.map((value) => { + const searchValue = (value) => { let aPool = pool, aIndex = index, length = 0; @@ -150,15 +150,23 @@ function search(value, { emojisToShowFilter, maxResults, include, exclude, custo } return aIndex.results; - }).filter(a => a); + }; - if (allResults.length > 1) { - results = intersect.apply(null, allResults); - } else if (allResults.length) { - results = allResults[0]; + if (values.length > 1) { + results = searchValue(value); } else { results = []; } + + allResults = values.map(searchValue).filter(a => a); + + if (allResults.length > 1) { + allResults = intersect.apply(null, allResults); + } else if (allResults.length) { + allResults = allResults[0]; + } + + results = uniq(results.concat(allResults)); } if (results) { |