From 58f487ac58e6a30e0f4a622d7f49dc0e4633b7ba Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Sun, 14 Apr 2024 16:02:04 -0400 Subject: [PATCH] Sort alphabetically and numerically i.e., "d2, d6, d8, d10, d12, d20", not "d10, d12, d2, d20, d6, d8" --- .../codeEditor/autocomplete-emoji.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/shared/naturalcrit/codeEditor/autocomplete-emoji.js b/shared/naturalcrit/codeEditor/autocomplete-emoji.js index eeddb99a7..847b15134 100644 --- a/shared/naturalcrit/codeEditor/autocomplete-emoji.js +++ b/shared/naturalcrit/codeEditor/autocomplete-emoji.js @@ -21,10 +21,25 @@ const showEmojiAutocomplete = function(CodeMirror, editor) { const list = Object.keys(emojis).filter(function(emoji) { return emoji.indexOf(currentWord) >= 0; + }).sort((a, b) => { // Sort autocomplete options alphabetically, case-insensitive + let lowerA = a.toLowerCase(); + let lowerB = b.toLowerCase(); + + lowerA = lowerA.replace(/\d+/g, function(match) { // Temporarily convert any numbers in emoji string + return match.padStart(4, '0'); // to 4-digits, left-padded with 0's. To aid in + }); // sorting numbers, i.e., "d6, d10, d20", not "d10, d20, d6" + lowerB = lowerB.replace(/\d+/g, function(match) { + return match.padStart(4, '0'); + }); + + if (lowerA < lowerB) + return -1; + + return 1; }).map(function(emoji) { return { - text: emoji + ":", - render: function(element, self, data) { + text: emoji + ":", // Text to output to editor when option is selected + render: function(element, self, data) { // How to display the option in the dropdown const div = document.createElement('div'); div.innerHTML = ` ${emoji}`; element.appendChild(div);