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