2 ( function( window, settings ) {
4 var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,
7 * Flag to determine if we should replace emoji characters with images.
21 * Runs when the document load event is fired, so we can do our first parse of the page.
30 if ( typeof window.twemoji === 'undefined' ) {
31 // Break if waiting for longer than 30 sec.
37 window.clearTimeout( timer );
38 timer = window.setTimeout( load, 50 );
44 twemoji = window.twemoji;
47 if ( MutationObserver ) {
48 new MutationObserver( function( mutationRecords ) {
49 var i = mutationRecords.length,
50 addedNodes, removedNodes, ii, node;
53 addedNodes = mutationRecords[ i ].addedNodes;
54 removedNodes = mutationRecords[ i ].removedNodes;
55 ii = addedNodes.length;
58 ii === 1 && removedNodes.length === 1 &&
59 addedNodes[0].nodeType === 3 &&
60 removedNodes[0].nodeName === 'IMG' &&
61 addedNodes[0].data === removedNodes[0].alt
67 node = addedNodes[ ii ];
69 if ( node.nodeType === 3 ) {
70 node = node.parentNode;
73 if ( ! node || node.nodeType !== 1 || ( 'ownerSVGElement' in node ) ||
74 ( node.className && typeof node.className === 'string' && node.className.indexOf( 'wp-exclude-emoji' ) !== -1 ) ) {
82 } ).observe( document.body, {
88 parse( document.body );
92 * Given an element or string, parse any emoji characters into Twemoji images.
96 * @param {HTMLElement|String} object The element or string to parse.
97 * @param {Object} args Additional options for Twemoji.
99 function parse( object, args ) {
100 if ( ! replaceEmoji || ! twemoji ) {
106 return twemoji.parse( object, {
107 base: settings.baseUrl,
109 className: args.className || 'emoji',
110 imgAttr: args.imgAttr,
111 callback: function( icon, options ) {
112 // Ignore some standard characters that TinyMCE recommends in its character map.
125 if ( ! settings.supports.flag && settings.supports.simple &&
126 ! /^1f1(?:e[6-9a-f]|f[0-9a-f])-1f1(?:e[6-9a-f]|f[0-9a-f])$/.test( icon ) ) {
131 return ''.concat( options.base, icon, options.ext );
137 * Initialize our emoji support, and set up listeners.
140 replaceEmoji = ! settings.supports.simple || ! settings.supports.flag;
142 if ( settings.DOMReady ) {
145 settings.readyCallback = load;
150 replaceEmoji: replaceEmoji,
155 window.wp = window.wp || {};
156 window.wp.emoji = new wpEmoji();
158 } )( window, window._wpemojiSettings );