]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-includes/js/wp-emoji.js
WordPress 4.2.2
[autoinstalls/wordpress.git] / wp-includes / js / wp-emoji.js
index 0ff3c6f677d54cd32d6b4a609b899e6b40921d3f..f02a6391a3943b660667ab1fc55cdc1acc711a29 100644 (file)
@@ -3,24 +3,6 @@
        function wpEmoji() {
                var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,
 
-               /**
-                * Flag to determine if the browser and the OS support emoji.
-                *
-                * @since 4.2.0
-                *
-                * @var Boolean
-                */
-               supportsEmoji = false,
-
-               /**
-                * Flag to determine if the browser and the OS support flag (two character) emoji.
-                *
-                * @since 4.2.0
-                *
-                * @var Boolean
-                */
-               supportsFlagEmoji = false,
-
                /**
                 * Flag to determine if we should replace emoji characters with images.
                 *
                 */
                replaceEmoji = false,
 
-               isIE8 = window.navigator.userAgent.indexOf( 'IE 8' ) !== -1,
-
                // Private
                twemoji, timer,
+               loaded = false,
                count = 0;
 
                /**
                 * @since 4.2.0
                 */
                function load() {
+                       if ( loaded ) {
+                               return;
+                       }
+
                        if ( typeof window.twemoji === 'undefined' ) {
                                // Break if waiting for longer than 30 sec.
                                if ( count > 600 ) {
                        }
 
                        twemoji = window.twemoji;
+                       loaded = true;
 
                        if ( MutationObserver ) {
                                new MutationObserver( function( mutationRecords ) {
                                        var i = mutationRecords.length,
-                                               ii, node;
+                                               addedNodes, removedNodes, ii, node;
 
                                        while ( i-- ) {
-                                               ii = mutationRecords[ i ].addedNodes.length;
+                                               addedNodes = mutationRecords[ i ].addedNodes;
+                                               removedNodes = mutationRecords[ i ].removedNodes;
+                                               ii = addedNodes.length;
+
+                                               if (
+                                                       ii === 1 && removedNodes.length === 1 &&
+                                                       addedNodes[0].nodeType === 3 &&
+                                                       removedNodes[0].nodeName === 'IMG' &&
+                                                       addedNodes[0].data === removedNodes[0].alt
+                                               ) {
+                                                       return;
+                                               }
 
                                                while ( ii-- ) {
-                                                       node = mutationRecords[ i ].addedNodes[ ii ];
+                                                       node = addedNodes[ ii ];
 
                                                        if ( node.nodeType === 3 ) {
                                                                node = node.parentNode;
                                                        }
 
+                                                       if ( ! node || ( node.className && node.className.indexOf( 'wp-exclude-emoji' ) !== -1 ) ) {
+                                                               continue;
+                                                       }
+
                                                        if ( node && node.nodeType === 1 ) {
                                                                parse( node );
                                                        }
@@ -96,7 +97,7 @@
                 * @param {Object} args Additional options for Twemoji.
                 */
                function parse( object, args ) {
-                       if ( ! replaceEmoji ) {
+                       if ( ! replaceEmoji || ! twemoji ) {
                                return object;
                        }
 
                                                        return false;
                                        }
 
-                                       if ( ! supportsFlagEmoji && supportsEmoji &&
+                                       if ( ! settings.supports.flag && settings.supports.simple &&
                                                ! /^1f1(?:e[6-9a-f]|f[0-9a-f])-1f1(?:e[6-9a-f]|f[0-9a-f])$/.test( icon ) ) {
 
                                                return false;
                        } );
                }
 
-               // Load when the readyState changes to 'interactive', not 'complete'.
-               function onLoad() {
-                       if ( ( ! isIE8 && 'interactive' === document.readyState ) || ( isIE8 && 'complete' === document.readyState ) ) {
-                               load();
-                       }
-               }
-
                /**
                 * Initialize our emoji support, and set up listeners.
                 */
                if ( settings ) {
-                       supportsEmoji = window._wpemojiSettings.supports.simple;
-                       supportsFlagEmoji = window._wpemojiSettings.supports.flag;
-                       replaceEmoji = ! supportsEmoji || ! supportsFlagEmoji;
-
-                       if ( ( ! isIE8 && 'loading' === document.readyState ) || ( isIE8 && 'complete' !== document.readyState ) ) {
-                               if ( document.addEventListener ) {
-                                       document.addEventListener( 'readystatechange', onLoad, false );
-                               } else if ( document.attachEvent ) {
-                                       document.attachEvent( 'onreadystatechange', onLoad );
-                               }
-                       } else {
+                       replaceEmoji = ! settings.supports.simple || ! settings.supports.flag;
+
+                       if ( settings.DOMReady ) {
                                load();
+                       } else {
+                               settings.readyCallback = load;
                        }
                }