From c730dbb1ccd6ad3891ffcdadaebe3961aa396d38 Mon Sep 17 00:00:00 2001 From: OsamaSayegh Date: Mon, 1 Feb 2021 18:44:10 +0300 Subject: [PATCH] FIX: Emoji search/autocomplete should respect selected skin tone Signed-off-by: OsamaSayegh --- .../discourse/app/components/d-editor.js | 5 ++++- .../discourse/app/components/emoji-picker.js | 1 + .../discourse/tests/unit/lib/emoji-test.js | 13 +++++++++++++ app/assets/javascripts/pretty-text/addon/emoji.js | 7 ++++++- 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/discourse/app/components/d-editor.js b/app/assets/javascripts/discourse/app/components/d-editor.js index de6531d172e17e..eb0e074b94a721 100644 --- a/app/assets/javascripts/discourse/app/components/d-editor.js +++ b/app/assets/javascripts/discourse/app/components/d-editor.js @@ -542,7 +542,10 @@ export default Component.extend({ } } - const options = emojiSearch(term, { maxResults: 5 }); + const options = emojiSearch(term, { + maxResults: 5, + diversity: this.emojiStore.diversity, + }); return resolve(options); }) diff --git a/app/assets/javascripts/discourse/app/components/emoji-picker.js b/app/assets/javascripts/discourse/app/components/emoji-picker.js index 3b20b486c75200..79893844465f0c 100644 --- a/app/assets/javascripts/discourse/app/components/emoji-picker.js +++ b/app/assets/javascripts/discourse/app/components/emoji-picker.js @@ -224,6 +224,7 @@ export default Component.extend({ if (event.target.value) { results.innerHTML = emojiSearch(event.target.value.toLowerCase(), { maxResults: 10, + diversity: this.emojiStore.diversity, }) .map(this._replaceEmoji) .join(""); diff --git a/app/assets/javascripts/discourse/tests/unit/lib/emoji-test.js b/app/assets/javascripts/discourse/tests/unit/lib/emoji-test.js index 34491cb537a3fd..22d24503b8e5e3 100644 --- a/app/assets/javascripts/discourse/tests/unit/lib/emoji-test.js +++ b/app/assets/javascripts/discourse/tests/unit/lib/emoji-test.js @@ -136,5 +136,18 @@ discourseModule("Unit | Utility | emoji", function () { // able to find middle of line search assert.equal(emojiSearch("check", { maxResults: 3 }).length, 3); + + // appends diversity + assert.deepEqual(emojiSearch("woman_artist", { diversity: 5 }), [ + "woman_artist:t5", + ]); + assert.deepEqual(emojiSearch("woman_artist", { diversity: 2 }), [ + "woman_artist:t2", + ]); + + // no diversity appended for emojis that can't be diversified + assert.deepEqual(emojiSearch("green_apple", { diversity: 3 }), [ + "green_apple", + ]); }); }); diff --git a/app/assets/javascripts/pretty-text/addon/emoji.js b/app/assets/javascripts/pretty-text/addon/emoji.js index 6e25d3881c194a..09c9f773b6f497 100644 --- a/app/assets/javascripts/pretty-text/addon/emoji.js +++ b/app/assets/javascripts/pretty-text/addon/emoji.js @@ -210,6 +210,7 @@ export function emojiExists(code) { let toSearch; export function emojiSearch(term, options) { const maxResults = (options && options["maxResults"]) || -1; + const diversity = options && options.diversity; if (maxResults === 0) { return []; } @@ -227,7 +228,11 @@ export function emojiSearch(term, options) { function addResult(t) { const val = aliasHash[t] || t; if (results.indexOf(val) === -1) { - results.push(val); + if (diversity && diversity > 1 && isSkinTonableEmoji(val)) { + results.push(`${val}:t${diversity}`); + } else { + results.push(val); + } } }