Make WordPress Core

Ticket #30966: 30966.15.patch

File 30966.15.patch, 5.4 KB (added by iseulde, 9 years ago)
  • src/wp-admin/js/word-count.js

     
    1 ( function() {
     1( function( window, wp, l10n ) {
    22        function WordCounter( settings ) {
    33                var key,
    44                        shortcodes;
     
    1313
    1414                shortcodes = this.settings.l10n.shortcodes;
    1515
    16                 if ( shortcodes && shortcodes.length ) {
     16                if ( shortcodes.length ) {
    1717                        this.settings.shortcodesRegExp = new RegExp( '\\[\\/?(?:' + shortcodes.join( '|' ) + ')[^\\]]*?\\]', 'g' );
    1818                }
    1919        }
     
    6060                        ']'
    6161                ].join( '' ), 'g' ),
    6262                astralRegExp: /[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
    63                 wordsRegExp: /\S\s+/g,
    64                 charactersRegExp: /\S/g,
    65                 allRegExp: /[^\f\n\r\t\v\u00AD\u2028\u2029]/g,
    66                 l10n: window.wordCountL10n || {}
     63                l10n: l10n || {}
    6764        };
    6865
    69         WordCounter.prototype.count = function( text, type ) {
     66        WordCounter.prototype.count = function( text, characters ) {
    7067                var count = 0;
    7168
    72                 type = type || this.settings.l10n.type;
    73 
    74                 if ( type !== 'characters' && type !== 'all' ) {
    75                         type = 'words';
     69                if ( characters == null ) {
     70                        characters = this.settings.l10n.characters;
    7671                }
    7772
    7873                if ( text ) {
     
    8782
    8883                        text = text.replace( this.settings.spaceRegExp, ' ' );
    8984
    90                         if ( type === 'words' ) {
     85                        if ( characters ) {
     86                                text = text.replace( this.settings.HTMLEntityRegExp, 'a' );
     87                                text = text.replace( this.settings.astralRegExp, 'a' );
     88                        } else {
    9189                                text = text.replace( this.settings.HTMLEntityRegExp, '' );
    9290                                text = text.replace( this.settings.connectorRegExp, ' ' );
    9391                                text = text.replace( this.settings.removeRegExp, '' );
    94                         } else {
    95                                 text = text.replace( this.settings.HTMLEntityRegExp, 'a' );
    96                                 text = text.replace( this.settings.astralRegExp, 'a' );
    9792                        }
    9893
    99                         text = text.match( this.settings[ type + 'RegExp' ] );
     94                        text = text.match( characters ? /[^\f\n\r\t\v\u00AD\u2028\u2029]/g : /\S\s+/g );
    10095
    10196                        if ( text ) {
    10297                                count = text.length;
     
    106101                return count;
    107102        };
    108103
    109         window.wp = window.wp || {};
    110         window.wp.utils = window.wp.utils || {};
    111         window.wp.utils.WordCounter = WordCounter;
    112 } )();
     104        wp = wp || {};
     105        wp.utils = wp.utils || {};
     106        wp.utils.WordCounter = WordCounter;
     107} )( window, window.wp, window.wordCountL10n );
  • src/wp-includes/script-loader.php

     
    402402        $scripts->add( 'word-count', "/wp-admin/js/word-count$suffix.js", array(), false, 1 );
    403403        did_action( 'init' ) && $scripts->localize( 'word-count', 'wordCountL10n', array(
    404404                /* translators: If your word count is based on single characters (East Asian characters),
    405                    enter 'characters', or 'all' to include spaces. Otherwise, enter 'words'.
    406                    Do not translate into your own language. */
    407                 'type' => _x( 'words', 'word count: words, characters or all?' ),
     405                   enter 'characters'. Otherwise, enter 'words'. Do not translate into your own language. */
     406                'characters' => _x( 'words', 'word count: words or characters?' ) === 'characters',
    408407                'shortcodes' => ! empty( $GLOBALS['shortcode_tags'] ) ? array_keys( $GLOBALS['shortcode_tags'] ) : array()
    409408        ) );
    410409
  • tests/qunit/wp-admin/js/word-count.js

     
    77                                message: 'Basic test.',
    88                                string: 'one two three',
    99                                words: 3,
    10                                 characters: 11,
    11                                 all: 13
     10                                characters: 13
    1211                        },
    1312                        {
    1413                                message: 'HTML tags.',
    1514                                string: 'one <em class="test">two</em><br />three',
    1615                                words: 3,
    17                                 characters: 11,
    18                                 all: 12
     16                                characters: 12
    1917                        },
    2018                        {
    2119                                message: 'Line breaks.',
    2220                                string: 'one\ntwo\nthree',
    2321                                words: 3,
    24                                 characters: 11,
    25                                 all: 11
     22                                characters: 11
    2623                        },
    2724                        {
    2825                                message: 'Encoded spaces.',
    2926                                string: 'one&nbsp;two&#160;three',
    3027                                words: 3,
    31                                 characters: 11,
    32                                 all: 13
     28                                characters: 13
    3329                        },
    3430                        {
    3531                                message: 'Punctuation.',
    3632                                string: 'It\'s two three \u2026 4?',
    3733                                words: 3,
    38                                 characters: 15,
    39                                 all: 19
     34                                characters: 19
    4035                        },
    4136                        {
    4237                                message: 'Em dash.',
    4338                                string: 'one\u2014two--three',
    4439                                words: 3,
    45                                 characters: 14,
    46                                 all: 14
     40                                characters: 14
    4741                        },
    4842                        {
    4943                                message: 'Shortcodes.',
    5044                                string: 'one [shortcode attribute="value"]two[/shortcode]three',
    5145                                words: 3,
    52                                 characters: 11,
    53                                 all: 12
     46                                characters: 12
    5447                        },
    5548                        {
    5649                                message: 'Astrals.',
    5750                                string: '\uD83D\uDCA9',
    5851                                words: 1,
    59                                 characters: 1,
    60                                 all: 1
     52                                characters: 1
    6153                        },
    6254                        {
    6355                                message: 'HTML comment.',
    6456                                string: 'one<!-- comment -->two three',
    6557                                words: 2,
    66                                 characters: 11,
    67                                 all: 12
     58                                characters: 12
    6859                        },
    6960                        {
    7061                                message: 'HTML entity.',
    7162                                string: '&gt; test',
    7263                                words: 1,
    73                                 characters: 5,
    74                                 all: 6
     64                                characters: 6
    7565                        }
    7666                ], function( test ) {
    77                         _.each( [ 'words', 'characters', 'all' ], function( type ) {
    78                                 assert.equal( wordCounter.count( test.string, type ), test[ type ], test.message + ' (' + type + ')' );
     67                        _.each( [ 'words', 'characters' ], function( type ) {
     68                                assert.equal( wordCounter.count( test.string, type === 'characters' ), test[ type ], test.message + ' (' + type + ')' );
    7969                        } );
    8070                } );
    8171        } );