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

This commit is contained in:
JC Brand 2019-11-18 12:49:44 +01:00
parent 1f673b7aae
commit 88ea9f8b61
4 changed files with 34 additions and 12 deletions

View File

@ -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()
}));
});

View File

@ -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,

View File

@ -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;
},
/**

View File

@ -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'),