91 lines
2.2 KiB
JavaScript
91 lines
2.2 KiB
JavaScript
(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()));
|
|
};
|
|
})();
|