Refactor all emoji utility methods into window.Signal.Emoji
This commit is contained in:
parent
32e2c6dcb5
commit
a5416e42c4
14 changed files with 131 additions and 387 deletions
|
@ -1,91 +0,0 @@
|
|||
(function() {
|
||||
'use strict';
|
||||
window.emoji_util = window.emoji_util || {};
|
||||
|
||||
// EmojiConverter overrides
|
||||
EmojiConvertor.prototype.getCountOfAllMatches = function(str, regex) {
|
||||
var match = regex.exec(str);
|
||||
var count = 0;
|
||||
|
||||
if (!regex.global) {
|
||||
return match ? 1 : 0;
|
||||
}
|
||||
|
||||
while (match) {
|
||||
count += 1;
|
||||
match = regex.exec(str);
|
||||
}
|
||||
|
||||
return count;
|
||||
};
|
||||
|
||||
EmojiConvertor.prototype.hasNormalCharacters = function(str) {
|
||||
var self = this;
|
||||
var noEmoji = str.replace(self.rx_unified, '').trim();
|
||||
return noEmoji.length > 0;
|
||||
};
|
||||
|
||||
EmojiConvertor.prototype.getSizeClass = function(str) {
|
||||
var self = this;
|
||||
|
||||
if (self.hasNormalCharacters(str)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
var emojiCount = self.getCountOfAllMatches(str, self.rx_unified);
|
||||
if (emojiCount > 8) {
|
||||
return '';
|
||||
} else if (emojiCount > 6) {
|
||||
return 'small';
|
||||
} else if (emojiCount > 4) {
|
||||
return 'medium';
|
||||
} else if (emojiCount > 2) {
|
||||
return 'large';
|
||||
} else {
|
||||
return 'jumbo';
|
||||
}
|
||||
};
|
||||
|
||||
var imgClass = /(<img [^>]+ class="emoji)(")/g;
|
||||
EmojiConvertor.prototype.addClass = function(text, sizeClass) {
|
||||
if (!sizeClass) {
|
||||
return text;
|
||||
}
|
||||
|
||||
return text.replace(imgClass, function(match, before, after) {
|
||||
return before + ' ' + sizeClass + after;
|
||||
});
|
||||
};
|
||||
|
||||
var imgTitle = /(<img [^>]+ class="emoji[^>]+ title=")([^:">]+)(")/g;
|
||||
EmojiConvertor.prototype.ensureTitlesHaveColons = function(text) {
|
||||
return text.replace(imgTitle, function(match, before, title, after) {
|
||||
return before + ':' + title + ':' + after;
|
||||
});
|
||||
};
|
||||
|
||||
EmojiConvertor.prototype.signalReplace = function(str) {
|
||||
var sizeClass = this.getSizeClass(str);
|
||||
|
||||
var text = this.replace_unified(str);
|
||||
text = this.addClass(text, sizeClass);
|
||||
|
||||
return this.ensureTitlesHaveColons(text);
|
||||
};
|
||||
|
||||
window.emoji = new EmojiConvertor();
|
||||
emoji.init_colons();
|
||||
emoji.img_sets.apple.path =
|
||||
'node_modules/emoji-datasource-apple/img/apple/64/';
|
||||
emoji.include_title = true;
|
||||
emoji.replace_mode = 'img';
|
||||
emoji.supports_css = false; // needed to avoid spans with background-image
|
||||
|
||||
window.emoji_util.parse = function($el) {
|
||||
if (!$el || !$el.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
$el.html(emoji.signalReplace($el.html()));
|
||||
};
|
||||
})();
|
|
@ -3,6 +3,7 @@
|
|||
const Backbone = require('../ts/backbone');
|
||||
const Crypto = require('./modules/crypto');
|
||||
const Database = require('./modules/database');
|
||||
const Emoji = require('../ts/util/emoji');
|
||||
const HTML = require('../ts/html');
|
||||
const Message = require('./modules/types/message');
|
||||
const Notifications = require('../ts/notifications');
|
||||
|
@ -117,6 +118,7 @@ exports.setup = (options = {}) => {
|
|||
Components,
|
||||
Crypto,
|
||||
Database,
|
||||
Emoji,
|
||||
HTML,
|
||||
Migrations,
|
||||
Notifications,
|
||||
|
|
|
@ -75,7 +75,6 @@
|
|||
this.timeStampView.setElement(this.$('.last-timestamp'));
|
||||
this.timeStampView.update();
|
||||
|
||||
emoji_util.parse(this.$('.name'));
|
||||
|
||||
if (lastMessage) {
|
||||
if (this.bodyView) {
|
||||
|
|
|
@ -177,7 +177,6 @@
|
|||
model: this.model,
|
||||
});
|
||||
|
||||
emoji_util.parse(this.$('.conversation-name'));
|
||||
|
||||
this.window = options.window;
|
||||
this.fileInput = new Whisper.FileInputView({
|
||||
|
@ -1331,7 +1330,7 @@
|
|||
}
|
||||
|
||||
const input = this.$messageField;
|
||||
const message = this.replace_colons(input.val()).trim();
|
||||
const message = window.Signal.Emoji.replaceColons(input.val()).trim();
|
||||
|
||||
try {
|
||||
if (!message.length && !this.fileInput.hasFiles()) {
|
||||
|
|
|
@ -408,7 +408,6 @@
|
|||
this.$el.addClass('control');
|
||||
const content = this.$('.content');
|
||||
content.text(this.model.getDescription());
|
||||
emoji_util.parse(content);
|
||||
} else {
|
||||
this.$el.removeClass('control');
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue