Make WordPress Core

Ticket #31242: 31242.4.patch

File 31242.4.patch, 10.5 KB (added by iseulde, 9 years ago)
  • Gruntfile.js

     
    302302                                        '!wp-includes/js/hoverIntent.js',
    303303                                        '!wp-includes/js/json2.js',
    304304                                        '!wp-includes/js/tw-sack.js',
     305                                        '!wp-includes/js/twemoji.js',
    305306                                        '!**/*.min.js'
    306307                                ],
    307308                                // Remove once other JSHint errors are resolved
  • src/wp-admin/js/inline-edit-post.js

     
    272272                                        if ( -1 !== r.indexOf( '<tr' ) ) {
    273273                                                $(inlineEditPost.what+id).siblings('tr.hidden').addBack().remove();
    274274                                                $('#edit-'+id).before(r).remove();
    275                                                 wp.emoji.parse( $( inlineEditPost.what + id ).get( 0 ) );
    276275                                                $(inlineEditPost.what+id).hide().fadeIn();
    277276                                        } else {
    278277                                                r = r.replace( /<.[^<>]*?>/g, '' );
  • src/wp-admin/js/inline-edit-tax.js

     
    117117                                                // Update the value in the Parent dropdown.
    118118                                                $( '#parent' ).find( 'option[value=' + option_value + ']' ).text( row.find( '.row-title' ).text() );
    119119
    120                                                 wp.emoji.parse( row.get( 0 ) );
    121 
    122120                                                row.hide().fadeIn();
    123121                                        } else {
    124122                                                $('#edit-'+id+' .inline-edit-save .error').html(r).show();
  • src/wp-admin/js/post.js

     
    741741                                        });
    742742                                }
    743743
    744                                 wp.emoji.parse( box.get( 0 ) );
    745 
    746744                                b.html(revert_b);
    747745                                real_slug.val(new_slug);
    748746                                $('#view-post-btn').show();
  • src/wp-admin/js/tags.js

     
    4949                        else
    5050                                $( '.tags' ).prepend( res.responses[0].supplemental.parents ); // As the parent is not visible, Insert the version with Parent - Child - ThisTerm
    5151
    52                         wp.emoji.parse( $( '.tags' ).get( 0 ) );
    53 
    5452                        $('.tags .no-items').remove();
    5553
    5654                        if ( form.find('select#parent') ) {
  • src/wp-includes/js/wp-emoji.js

     
    1 /* global _wpemojiSettings, twemoji */
    21window.wp = window.wp || {};
    32
    4 (function() {
    5         var emoji;
    6 
    7         wp.emoji = emoji = {
    8                 /**
    9                  * The CDN URL for where emoji files are hosted.
    10                  *
    11                  * @since 4.2.0
    12                  *
    13                  * @var string
    14                  */
    15                 baseUrl: '//s0.wp.com/wp-content/mu-plugins/emoji/twemoji/72x72',
    16 
    17                 /**
    18                  * The extension of the hosted emoji files.
    19                  *
    20                  * @since 4.2.0
    21                  *
    22                  * @var string
    23                  */
    24                 ext: '.png',
    25 
     3( function( window, wp, twemoji, settings ) {
     4        var emoji = {
    265                /**
    276                 * Flag to determine if we should parse all emoji characters into Twemoji images.
    287                 *
    298                 * @since 4.2.0
    309                 *
    31                  * @var bool
     10                 * @var Boolean
    3211                 */
    3312                parseAllEmoji: false,
    3413
     
    3716                 *
    3817                 * @since 4.2.0
    3918                 *
    40                  * @var bool
     19                 * @var Boolean
    4120                 */
    4221                parseEmoji: false,
    4322
     
    4625                 *
    4726                 * @since 4.2.0
    4827                 *
    49                  * @var bool
     28                 * @var Boolean
    5029                 */
    5130                parseFlags: false,
    5231
     
    5635                 * @since 4.2.0
    5736                 */
    5837                init: function() {
    59                         if ( typeof _wpemojiSettings !== 'undefined' ) {
    60                                 emoji.baseUrl = _wpemojiSettings.baseUrl || emoji.baseUrl;
    61                                 emoji.ext = _wpemojiSettings.ext || emoji.ext;
    62                         }
    63 
    6438                        emoji.parseAllEmoji = ! emoji.browserSupportsEmoji();
    6539                        emoji.parseFlags = ! emoji.browserSupportsFlagEmoji();
    6640                        emoji.parseEmoji = emoji.parseAllEmoji || emoji.parseFlags;
    6741
    68                         if ( ! emoji.parseEmoji ) {
    69                                 return;
     42                        if ( window.addEventListener ) {
     43                                window.addEventListener( 'load', emoji.load, false );
     44                        } else if ( window.attachEvent ) {
     45                                window.attachEvent( 'onload', emoji.load );
    7046                        }
    7147                },
    7248
     
    7652                 * @since 4.2.0
    7753                 */
    7854                load: function() {
     55                        new MutationObserver( callback )
     56
     57                        .observe( document.body, {
     58                                childList: true,
     59                                subtree: true
     60                        } );
     61
     62                        function callback( mutationRecords ) {
     63                                var i = mutationRecords.length,
     64                                        ii,
     65                                        node;
     66
     67                                while ( i-- ) {
     68                                        ii = mutationRecords[ i ].addedNodes.length;
     69
     70                                        while ( ii-- ) {
     71                                                node = mutationRecords[ i ].addedNodes[ ii ];
     72
     73                                                if ( node.nodeType === 3 ) {
     74                                                        node = node.parentNode;
     75                                                }
     76
     77                                                if ( node.nodeType === 1 ) {
     78                                                        emoji.parse( node );
     79                                                }
     80                                        }
     81                                }
     82                        }
     83
    7984                        emoji.parse( document.body );
    8085                },
    8186
     
    8489                 *
    8590                 * @since 4.2.0
    8691                 *
    87                  * @return {bool} True if the browser can render emoji, false if it cannot.
     92                 * @return {Boolean} True if the browser can render emoji, false if it cannot.
    8893                 */
    8994                browserSupportsEmoji: function() {
    90                         var context, smile;
     95                        var canvas = document.createElement( 'canvas' ),
     96                                context = canvas.getContext && canvas.getContext( '2d' );
    9197
    92                         if ( ! document.createElement( 'canvas' ).getContext ) {
    93                                 return;
     98                        if ( ! context.fillText ) {
     99                                return false;
    94100                        }
    95101
    96                         context = document.createElement( 'canvas' ).getContext( '2d' );
    97                         if ( typeof context.fillText != 'function' ) {
    98                                 return;
    99                         }
    100 
    101                         smile = String.fromCharCode( 55357 ) + String.fromCharCode( 56835 );
    102 
    103102                        /*
    104103                         * Chrome OS X added native emoji rendering in M41. Unfortunately,
    105104                         * it doesn't work when the font is bolder than 500 weight. So, we
     
    107106                         */
    108107                        context.textBaseline = 'top';
    109108                        context.font = '600 32px Arial';
    110                         context.fillText( smile, 0, 0 );
     109                        context.fillText( String.fromCharCode( 55357, 56835 ), 0, 0 );
    111110
    112111                        return context.getImageData( 16, 16, 1, 1 ).data[0] !== 0;
    113112                },
     
    117116                 * made of two characters, so some browsers (notably, Firefox OS X) don't support them.
    118117                 *
    119118                 * @since 4.2.0
    120                  * @return {bool} True if the browser renders flag characters as a flag glyph, false if it does not.
     119                 *
     120                 * @return {Boolean} True if the browser renders flag characters as a flag glyph, false if it does not.
    121121                 */
    122122                browserSupportsFlagEmoji: function() {
    123                         var context, flag, canvas;
     123                        var canvas = document.createElement( 'canvas' ),
     124                                context = canvas.getContext && canvas.getContext( '2d' );
    124125
    125                         canvas = document.createElement( 'canvas' );
    126 
    127                         if ( ! canvas.getContext ) {
    128                                 return;
    129                         }
    130 
    131                         context = canvas.getContext( '2d' );
    132 
    133                         if ( typeof context.fillText != 'function' ) {
    134                                 return;
     126                        if ( ! context.fillText ) {
     127                                return false;
    135128                        }
    136129
    137                         flag =  String.fromCharCode(55356) + String.fromCharCode(56812); // [G]
    138                         flag += String.fromCharCode(55356) + String.fromCharCode(56807); // [B]
    139 
    140130                        context.textBaseline = 'top';
    141131                        context.font = '32px Arial';
    142                         context.fillText( flag, 0, 0 );
     132                        context.fillText( String.fromCharCode( 55356, 56812, 55356, 56807 ), 0, 0 );
    143133
    144134                        /*
    145135                         * This works because the image will be one of three things:
     
    151141                         * to a larger image (4-5KB data URL).
    152142                         */
    153143                        return canvas.toDataURL().length > 3000;
    154 
    155144                },
    156145
    157146                /**
    158                  * Given a DOM node, parse any emoji characters into Twemoji images.
     147                 * Given an element or string, parse any emoji characters into Twemoji images.
    159148                 *
    160149                 * @since 4.2.0
    161150                 *
    162                  * @param {Element} element The DOM node to parse.
     151                 * @param {HTMLElement|String} object The element or string to parse.
    163152                 */
    164                 parse: function( element ) {
     153                parse: function( object ) {
    165154                        if ( ! emoji.parseEmoji ) {
    166                                 return;
     155                                return object;
    167156                        }
    168157
    169                         return twemoji.parse( element, {
    170                                 base:     emoji.baseUrl,
    171                                 ext:      emoji.ext,
     158                        return twemoji.parse( object, {
     159                                base: settings.baseUrl,
     160                                ext: settings.ext,
    172161                                callback: function( icon, options ) {
    173162                                        // Ignore some standard characters that TinyMCE recommends in its character map.
    174163                                        switch ( icon ) {
     
    193182                }
    194183        };
    195184
    196         if ( window.addEventListener ) {
    197                 window.addEventListener( 'load', emoji.load, false );
    198         } else if ( window.attachEvent ) {
    199                 window.attachEvent( 'onload', emoji.load );
    200         }
    201 
    202185        emoji.init();
    203 })();
     186
     187        wp.emoji = emoji;
     188} )( window, window.wp, window.twemoji, window._wpemojiSettings );
  • src/wp-includes/script-loader.php

     
    447447        $scripts->enqueue( 'emoji' );
    448448
    449449        if ( is_admin() ) {
    450                 $scripts->add( 'admin-tags', "/wp-admin/js/tags$suffix.js", array( 'jquery', 'wp-ajax-response', 'emoji' ), false, 1 );
     450                $scripts->add( 'admin-tags', "/wp-admin/js/tags$suffix.js", array( 'jquery', 'wp-ajax-response' ), false, 1 );
    451451                did_action( 'init' ) && $scripts->localize( 'admin-tags', 'tagsl10n', array(
    452452                        'noPerm' => __('You do not have permission to do that.'),
    453453                        'broken' => __('An unidentified error has occurred.')
     
    470470                        'tagDelimiter' => _x( ',', 'tag delimiter' ),
    471471                ) );
    472472
    473                 $scripts->add( 'post', "/wp-admin/js/post$suffix.js", array( 'suggest', 'wp-lists', 'postbox', 'tags-box', 'emoji' ), false, 1 );
     473                $scripts->add( 'post', "/wp-admin/js/post$suffix.js", array( 'suggest', 'wp-lists', 'postbox', 'tags-box' ), false, 1 );
    474474                did_action( 'init' ) && $scripts->localize( 'post', 'postL10n', array(
    475475                        'ok' => __('OK'),
    476476                        'cancel' => __('Cancel'),
     
    522522
    523523                $scripts->add( 'theme', "/wp-admin/js/theme$suffix.js", array( 'wp-backbone' ), false, 1 );
    524524
    525                 $scripts->add( 'inline-edit-post', "/wp-admin/js/inline-edit-post$suffix.js", array( 'jquery', 'suggest', 'emoji' ), false, 1 );
     525                $scripts->add( 'inline-edit-post', "/wp-admin/js/inline-edit-post$suffix.js", array( 'jquery', 'suggest' ), false, 1 );
    526526                did_action( 'init' ) && $scripts->localize( 'inline-edit-post', 'inlineEditL10n', array(
    527527                        'error' => __('Error while saving the changes.'),
    528528                        'ntdeltitle' => __('Remove From Bulk Edit'),
     
    530530                        'comma' => trim( _x( ',', 'tag delimiter' ) ),
    531531                ) );
    532532
    533                 $scripts->add( 'inline-edit-tax', "/wp-admin/js/inline-edit-tax$suffix.js", array( 'jquery', 'emoji' ), false, 1 );
     533                $scripts->add( 'inline-edit-tax', "/wp-admin/js/inline-edit-tax$suffix.js", array( 'jquery' ), false, 1 );
    534534                did_action( 'init' ) && $scripts->localize( 'inline-edit-tax', 'inlineEditL10n', array(
    535535                        'error' => __('Error while saving the changes.')
    536536                ) );