Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-10-14 18:08:42 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-10-14 18:08:42 +0300
commit99670fc6a027caee34a6537c8def2e998d1ac5c2 (patch)
treea2ea3ec131d3cb155e13140c8486f1be2a5822b4 /app/assets/javascripts/emoji
parentc9ca178ba4c9a3e48d9d069f7d7486a29827cc61 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts/emoji')
-rw-r--r--app/assets/javascripts/emoji/index.js66
1 files changed, 49 insertions, 17 deletions
diff --git a/app/assets/javascripts/emoji/index.js b/app/assets/javascripts/emoji/index.js
index b03da311c43..c06ecb3a8d9 100644
--- a/app/assets/javascripts/emoji/index.js
+++ b/app/assets/javascripts/emoji/index.js
@@ -66,12 +66,8 @@ export function isEmojiNameValid(name) {
return validEmojiNames.indexOf(name) >= 0;
}
-export function getValidEmojiUnicodeValues() {
- return Object.values(emojiMap).map(({ e }) => e);
-}
-
-export function getValidEmojiDescriptions() {
- return Object.values(emojiMap).map(({ d }) => d);
+export function getAllEmoji() {
+ return emojiMap;
}
/**
@@ -106,16 +102,43 @@ export function getEmoji(query, fallback = false) {
}
const searchMatchers = {
- fuzzy: (value, query) => fuzzaldrinPlus.score(value, query) > 0, // Fuzzy matching compares using a fuzzy matching library
- contains: (value, query) => value.indexOf(query.toLowerCase()) >= 0, // Contains matching compares by indexOf
- exact: (value, query) => value === query.toLowerCase(), // Exact matching compares by equality
+ // Fuzzy matching compares using a fuzzy matching library
+ fuzzy: (value, query) => {
+ const score = fuzzaldrinPlus.score(value, query) > 0;
+ return { score, success: score > 0 };
+ },
+ // Contains matching compares by indexOf
+ contains: (value, query) => {
+ const index = value.indexOf(query.toLowerCase());
+ return { index, success: index >= 0 };
+ },
+ // Exact matching compares by equality
+ exact: (value, query) => {
+ return { success: value === query.toLowerCase() };
+ },
};
const searchPredicates = {
- name: (matcher, query) => emoji => matcher(emoji.name, query), // Search by name
- alias: (matcher, query) => emoji => emoji.aliases.some(v => matcher(v, query)), // Search by alias
- description: (matcher, query) => emoji => matcher(emoji.d, query), // Search by description
- unicode: (matcher, query) => emoji => emoji.e === query, // Search by unicode value (always exact)
+ // Search by name
+ name: (matcher, query) => emoji => {
+ const m = matcher(emoji.name, query);
+ return [{ ...m, emoji, field: emoji.name }];
+ },
+ // Search by alias
+ alias: (matcher, query) => emoji =>
+ emoji.aliases.map(alias => {
+ const m = matcher(alias, query);
+ return { ...m, emoji, field: alias };
+ }),
+ // Search by description
+ description: (matcher, query) => emoji => {
+ const m = matcher(emoji.d, query);
+ return [{ ...m, emoji, field: emoji.d }];
+ },
+ // Search by unicode value (always exact)
+ unicode: (matcher, query) => emoji => {
+ return [{ emoji, field: emoji.e, success: emoji.e === query }];
+ },
};
/**
@@ -138,6 +161,8 @@ const searchPredicates = {
* matching compares using a fuzzy matching library.
* @param {Boolean} opts.fallback If true, a fallback emoji will be returned if
* the result set is empty. Defaults to false.
+ * @param {Boolean} opts.raw Returns the raw match data instead of just the
+ * matching emoji.
* @returns {Object[]} A list of emoji that match the query.
*/
export function searchEmoji(query, opts) {
@@ -150,6 +175,7 @@ export function searchEmoji(query, opts) {
fields = ['name', 'alias', 'description', 'unicode'],
match = 'exact',
fallback = false,
+ raw = false,
} = opts || {};
// optimization for an exact match in name and alias
@@ -161,16 +187,22 @@ export function searchEmoji(query, opts) {
const matcher = searchMatchers[match] || searchMatchers.exact;
const predicates = fields.map(f => searchPredicates[f](matcher, query));
- const results = Object.values(emojiMap).filter(emoji =>
- predicates.some(predicate => predicate(emoji)),
- );
+ const results = Object.values(emojiMap)
+ .flatMap(emoji => predicates.flatMap(predicate => predicate(emoji)))
+ .filter(r => r.success);
// Fallback to question mark for unknown emojis
if (fallback && results.length === 0) {
+ if (raw) {
+ return [{ emoji: emojiMap.grey_question }];
+ }
return [emojiMap.grey_question];
}
- return results;
+ if (raw) {
+ return results;
+ }
+ return results.map(r => r.emoji);
}
let emojiCategoryMap;