You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			92 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			92 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()));
 | |
|   };
 | |
| })();
 |