浏览代码

Match a message of only emojis (instead of just a single emoji)

JC Brand 5 年之前
父节点
当前提交
88ea9f8b61
共有 4 个文件被更改,包括 34 次插入12 次删除
  1. 19 0
      spec/emojis.js
  2. 3 3
      src/headless/converse-chat.js
  3. 11 8
      src/headless/converse-emoji.js
  4. 1 1
      src/headless/converse-muc.js

+ 19 - 0
spec/emojis.js

@@ -218,6 +218,25 @@
                 expect(view.model.messages.models.length).toBe(3);
                 message = chat_content.querySelector('.message:last-child .chat-msg__text');
                 expect(u.hasClass('chat-msg__text--larger', message)).toBe(false);
+
+                textarea.value = ':smile: Hello world!';
+                view.onKeyDown({
+                    target: textarea,
+                    preventDefault: function preventDefault () {},
+                    keyCode: 13 // Enter
+                });
+                await new Promise(resolve => view.once('messageInserted', resolve));
+
+                textarea.value = ':smile: :smiley: :imp:';
+                view.onKeyDown({
+                    target: textarea,
+                    preventDefault: function preventDefault () {},
+                    keyCode: 13 // Enter
+                });
+                await new Promise(resolve => view.once('messageInserted', resolve));
+
+                message = chat_content.querySelector('.message:last-child .chat-msg__text');
+                expect(u.hasClass('chat-msg__text--larger', message)).toBe(true);
                 done()
             }));
         });

+ 3 - 3
src/headless/converse-chat.js

@@ -747,7 +747,7 @@ converse.plugins.add('converse-chat', {
                     'origin_id': origin_id,
                     'fullname': _converse.xmppstatus.get('fullname'),
                     'from': _converse.bare_jid,
-                    'is_single_emoji': text ? u.isSingleEmoji(text) : false,
+                    'is_single_emoji': text ? u.isOnlyEmojis(text) : false,
                     'sender': 'me',
                     'time': (new Date()).toISOString(),
                     'message': text ? u.httpToGeoUri(u.shortnameToUnicode(text), _converse) : undefined,
@@ -810,7 +810,7 @@ converse.plugins.add('converse-chat', {
                         'message': attrs.message,
                         'older_versions': older_versions,
                         'references': attrs.references,
-                        'is_single_emoji':  attrs.message ? u.isSingleEmoji(attrs.message) : false,
+                        'is_single_emoji':  attrs.message ? u.isOnlyEmojis(attrs.message) : false,
                         'origin_id': u.getUniqueId(),
                         'received': undefined
                     });
@@ -989,7 +989,7 @@ converse.plugins.add('converse-chat', {
                     'chat_state': chat_state,
                     'is_archived': this.isArchived(original_stanza),
                     'is_delayed': !!delay,
-                    'is_single_emoji': text ? await u.isSingleEmoji(text) : false,
+                    'is_single_emoji': text ? await u.isOnlyEmojis(text) : false,
                     'is_spoiler': !!spoiler,
                     'message': text,
                     'msgid': msgid,

+ 11 - 8
src/headless/converse-emoji.js

@@ -324,18 +324,21 @@ converse.plugins.add('converse-emoji', {
 
             /**
              * Determines whether the passed in string is just a single emoji shortname;
-             * @method u.isSingleEmoji
+             * @method u.isOnlyEmojis
              * @param {string} shortname - A string which migh be just an emoji shortname
              * @returns {boolean}
              */
-            isSingleEmoji (shortname) {
-                shortname = shortname.trim();
-                if (!shortname || (shortname.length > 2 && !shortname.startsWith(':'))) {
-                    return;
+            isOnlyEmojis (text) {
+                const words = text.trim().split(/\s+/);
+                if (words.length === 0 || words.length > 6) {
+                    return false;
                 }
-                const result = twemoji.default.parse(u.shortnameToUnicode(shortname));
-                const match = result.match(/<img class="emoji" draggable="false" alt=".*?" src=".*?\.png"\/>/);
-                return match && match.length === 1;
+                const rejects = words.filter(text => {
+                    const result = twemoji.default.parse(u.shortnameToUnicode(text));
+                    const match = result.match(/<img class="emoji" draggable="false" alt=".*?" src=".*?\.png"\/>/);
+                    return !match || match.length !== 1;
+                });
+                return rejects.length === 0;
             },
 
             /**

+ 1 - 1
src/headless/converse-muc.js

@@ -742,7 +742,7 @@ converse.plugins.add('converse-muc', {
                     'origin_id': origin_id,
                     'from': `${this.get('jid')}/${this.get('nick')}`,
                     'fullname': this.get('nick'),
-                    'is_single_emoji': text ? u.isSingleEmoji(text) : false,
+                    'is_single_emoji': text ? u.isOnlyEmojis(text) : false,
                     'is_spoiler': is_spoiler,
                     'message': text ? u.httpToGeoUri(u.shortnameToUnicode(text), _converse) : undefined,
                     'nick': this.get('nick'),